當前位置:首頁 » 操作系統 » launcher3源碼分析

launcher3源碼分析

發布時間: 2022-07-09 07:57:02

⑴ android源碼中有launcher2launcher3,用的是哪個

1、Launcher進程啟動過程
可以由下面圖看到Launcher進程是如何被創建啟動:

Activity Manager通過發送Intend來啟動Launcher。
Intent intent = new Intent(mTopAction, mTopData != null ?

Uri.parse(mTopData) : null);

intent.setComponent(mTopComponent);

if (mFactoryTest != SystemServer.FACTORY_TEST_LOW_LEVEL)

{

intent.addCategory(Intent.CATEGORY_HOME);

}

startActivityLocked(null, intent, null, null, 0, aInfo,

null, null, 0, 0, 0, false, false);
復制代碼
因此,如果你要開機啟動一個替換Launcher的程序,只要在程序<intent-filter>裡面加入action.MAIN 、
category.HOME、category.DEFAULT就可以。如果出現多個程序都加入這種intent,系統會彈出讓你選擇
哪個作為啟動器。

2、Launcher初始化——LauncherApplication。
Application類,我想大部分做Android應用的朋友都用過,每個Android應用默認都有一個Application類,
你也可以繼承Application類,然後加入自己代碼。Application是一個全局的應用類,在AndroidManifest.xml
我們也可以找到Application標簽。

<application

android:name="com.android.launcher2.LauncherApplication"

android:label="@string/application_name"

android:icon="@drawable/ic_launcher_home"

android:hardwareAccelerated="@bool/config_hardwareAccelerated"

android:largeHeap="@bool/config_largeHeap"

android:configChanges="locale">

</application>
復制代碼
Android四大組件的聲明都需要放到application標簽裡面,默認使用的是系統的Application類,如果你在項目裡面重載了它。就需要在標簽,name屬性下寫上你的新的Application類名。Launcher裡面就是繼承了Application為LauncherApplication。應用啟動的時候首先會載入Application。我們可以看到Launcher主類Launcher.java的onCreate函數裡面,第一個就是獲取Application的實例。
LauncherApplication app = ((LauncherApplication)getApplication());
復制代碼
接下來我們看看LauncherApplication裡面初始化,LauncherApplication大部分工作就是在初始化完成,剩下都是一些返回介面。
@Override

public void onCreate()

{

super.onCreate();

//獲取屏幕大小,主要用來區分手機還是平板

final int screenSize = getResources().getConfiguration().screenLayout &

Configuration.SCREENLAYOUT_SIZE_MASK;

sIsScreenLarge = screenSize == Configuration.SCREENLAYOUT_SIZE_LARGE ||

screenSize == Configuration.SCREENLAYOUT_SIZE_XLARGE;

//屏幕密度

sScreenDensity = getResources().getDisplayMetrics().density;

//IconCahe裡面保存了界面所有應用圖標的繪畫需要的數據,這個到時候具體分析再說。

//加入這東西的主要原因是為了提高繪畫界面的效率

mIconCache = new IconCache(this);

//資料庫載入類,LauncherModel是Launcher裡面非常重要的一個類,相當於MVC模式裡面的

//Model功能,管理數據和初始化數據

mModel = new LauncherModel(this, mIconCache);

//下面注冊了一些監聽器,主要包含APK文件更新刪除等數據變化的時候接收的通知

//接收通知後,主要是用來更新Launcher裡面的資料庫。因為桌面應用圖標數據,只會載入一次

IntentFilter filter = new IntentFilter(Intent.ACTION_PACKAGE_ADDED);

filter.addAction(Intent.ACTION_PACKAGE_REMOVED);

filter.addAction(Intent.ACTION_PACKAGE_CHANGED);

filter.addDataScheme("package");

registerReceiver(mModel, filter);

filter = new IntentFilter();

filter.addAction(Intent.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE);

filter.addAction(Intent.ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE);

filter.addAction(Intent.ACTION_LOCALE_CHANGED);

filter.addAction(Intent.ACTION_CONFIGURATION_CHANGED);

registerReceiver(mModel, filter);

filter = new IntentFilter();

filter.addAction(SearchManager.INTENT_GLOBAL_SEARCH_ACTIVITY_CHANGED);

registerReceiver(mModel, filter);

filter = new IntentFilter();

filter.addAction(SearchManager.INTENT_ACTION_SEARCHABLES_CHANGED);

registerReceiver(mModel, filter);

//contentresolver則是用於管理所有程序的contentprovider實例

ContentResolver resolver = getContentResolver();

//注冊內容觀察者,監聽application資料庫變化,回調

resolver.registerContentObserver(LauncherSettings.Favorites.CONTENT_URI, true, mFavoritesObserver);

}
復制代碼
上面是LauncherApplication最主要的工作,初始化整個Launcher的一些關鍵類,和注冊一些監聽器。主要都是用來監聽應用的安裝更新刪除等導致Launcher資料庫變化的操作。Launcher數據都是使用contentprovider來提供數據。其中注冊的監聽介面是
private final ContentObserver mFavoritesObserver = new ContentObserver(new Handler())

{

@Override

public void onChange(boolean selfChange)

{

//重新載入界面數據

mModel.startLoader(LauncherApplication.this, false);

}

};
復制代碼
LauncherSettings.Favorites.CONTENT_URI裡面數據發生變化的時候,都會調用mModel.startLoader()介面,
重新載入Launcher的數據。startLoader的具體操作,我後面分析LauncherModel類的時候會分析。這一塊涉及
Launcher所有數據載入。剩下的接都是返回初始化時候創建的對象或者獲取屏幕密度、獲取是否大屏幕。
後面很多處理都需要判斷是否是大屏幕,4.0以後手機平板都共用一套系統,導致多了很多處理。 3、Launcher.java初始化Launcher.java是Launcher裡面最主要的類,是一個Activity。啟動的第一個組件。既然是Activity,我們要分析它初始化,毫無疑問,需要找到onCreate()裡面分析。把主要一些分析用注釋方式寫在代碼裡面,這樣比較方便閱讀。

⑵ Launcher3是什麼意思啊

Launcher3的意思:啟動器3。

Launcher是安卓系統中的桌面啟動器,安卓系統的桌面UI統稱為Launcher。Launcher是安卓系統中的主要程序組件之一,安卓系統中如果沒有Launcher就無法啟動安卓桌面,Launcher出錯的時候,安卓系統會出現「進程 com.android.launcher 意外停止」的提示窗口。這時需要重新啟動Launcher。

(2)launcher3源碼分析擴展閱讀:

Launcher的界面的rootview是DragLayer,它是一個FrameLayout,在它上面workspace(應該說是celllayout)佔了絕大部分的空間,celllayout的參數文件是workspace_screen.xml。

workspace既是一個DropTarget又是一個DragSource,可以從AllAppGridView中拖出應用程序放在它上面,也可以把它裡面的item拖走刪除或者拖到bottombar裡面去。

對於想修改launcher的同學,可以自定義DragLayer.java,比如改為AbsoluteLayout等,再修改launcher.xml布局文件,就可以實現各種樣式的launcher界面。

⑶ 手機上顯示launcher3已停止運行是什麼意思

桌面軟體出錯,用其它手機下載新桌面軟體,用藍牙傳輸,安裝後解決。

⑷ 手機屏幕出現Launcher3是什麼意思

可進行以下操作:
1.重新開關機
2.卸載近期安裝的第三方軟體後觀察
3.備份手機數據(電話簿、簡訊息、多媒體文件等),恢復出廠設置
如果恢復出廠設置問題依然存在,建議將手機送至就近的服務中心進行檢測及進一步處理

⑸ launcher3是什麼

在玩游戲?從官網下載完客戶端 安裝後 是無法直接進入游戲的 你去游戲安裝目錄 運行launcher 會出現 游戲更新信息 更新完成後 在次 進入游戲 你會發現 下面出現一個 收費 電信和網通 這時 仍然是無法進入 然後在去 游戲安裝目錄下 找 version 記事本 打開 把下面內容覆蓋在上面launcher.exe 27.0.3 保存 現在可以進入游戲

⑹ Android的Launcher3源碼中,FocusIndicatorView有什麼作用

1、Launcher進程啟動過程可以由下面圖看到Launcher進程是如何被創建啟動:ActivityManager通過發送Intend來啟動Launcher。Intentintent=newIntent(mTopAction,mTopData!=null?Uri.parse(mTopData):null);intent.setComponent(mTopComponent);if(mFactoryTest!=SystemServer.FACTORY_TEST_LOW_LEVEL){intent.addCategory(Intent.CATEGORY_HOME);}startActivityLocked(null,intent,null,null,0,aInfo,null,null,0,0,0,false,false);復制代碼因此,如果你要開機啟動一個替換Launcher的程序,只要在程序裡面加入action.MAIN、category.HOME、category.DEFAULT就可以。如果出現多個程序都加入這種intent,系統會彈出讓你選擇哪個作為啟動器。2、Launcher初始化——LauncherApplication。Application類,我想大部分做Android應用的朋友都用過,每個Android應用默認都有一個Application類,你也可以繼承Application類,然後加入自己代碼。Application是一個全局的應用類,在AndroidManifest.xml我們也可以找到Application標簽。復制代碼Android四大組件的聲明都需要放到application標簽裡面,默認使用的是系統的Application類,如果你在項目裡面重載了它。就需要在標簽,name屬性下寫上你的新的Application類名。Launcher裡面就是繼承了Application為LauncherApplication。應用啟動的時候首先會載入Application。我們可以看到Launcher主類Launcher.java的onCreate函數裡面,第一個就是獲取Application的實例。LauncherApplicationapp=((LauncherApplication)getApplication());復制代碼接下來我們看看LauncherApplication裡面初始化,LauncherApplication大部分工作就是在初始化完成,剩下都是一些返回介面。@OverridepublicvoidonCreate(){super.onCreate();//獲取屏幕大小,主要用來區分手機還是平板finalintscreenSize=getResources().getConfiguration().screenLayout&Configuration.SCREENLAYOUT_SIZE_MASK;sIsScreenLarge=screenSize==Configuration.SCREENLAYOUT_SIZE_LARGE||screenSize==Configuration.SCREENLAYOUT_SIZE_XLARGE;//屏幕密度sScreenDensity=getResources().getDisplayMetrics().density;//IconCahe裡面保存了界面所有應用圖標的繪畫需要的數據,這個到時候具體分析再說。//加入這東西的主要原因是為了提高繪畫界面的效率mIconCache=newIconCache(this);//資料庫載入類,LauncherModel是Launcher裡面非常重要的一個類,相當於MVC模式裡面的//Model功能,管理數據和初始化數據mModel=newLauncherModel(this,mIconCache);//下面注冊了一些監聽器,主要包含APK文件更新刪除等數據變化的時候接收的通知//接收通知後,主要是用來更新Launcher裡面的資料庫。因為桌面應用圖標數據,只會載入一次IntentFilterfilter=newIntentFilter(Intent.ACTION_PACKAGE_ADDED);filter.addAction(Intent.ACTION_PACKAGE_REMOVED);filter.addAction(Intent.ACTION_PACKAGE_CHANGED);filter.addDataScheme("package");registerReceiver(mModel,filter);filter=newIntentFilter();filter.addAction(Intent.ACTION_EXTERNAL_APPLICATIONS_AVAILABLE);filter.addAction(Intent.ACTION_EXTERNAL_APPLICATIONS_UNAVAILABLE);filter.addAction(Intent.ACTION_LOCALE_CHANGED);filter.addAction(Intent.ACTION_CONFIGURATION_CHANGED);registerReceiver(mModel,filter);filter=newIntentFilter();filter.addAction(SearchManager.INTENT_GLOBAL_SEARCH_ACTIVITY_CHANGED);registerReceiver(mModel,filter);filter=newIntentFilter();filter.addAction(SearchManager.INTENT_ACTION_SEARCHABLES_CHANGED);registerReceiver(mModel,filter);//contentresolver則是用於管理所有程序的contentprovider實例ContentResolverresolver=getContentResolver();//注冊內容觀察者,監聽application資料庫變化,回調resolver.registerContentObserver(LauncherSettings.Favorites.CONTENT_URI,true,mFavoritesObserver);}復制代碼上面是LauncherApplication最主要的工作,初始化整個Launcher的一些關鍵類,和注冊一些監聽器。主要都是用來監聽應用的安裝更新刪除等導致Launcher資料庫變化的操作。Launcher數據都是使用contentprovider來提供數據。其中注冊的監聽介面是=newContentObserver(newHandler()){@OverridepublicvoidonChange(booleanselfChange){//重新載入界面數據mModel.startLoader(LauncherApplication.this,false);}};復制代碼LauncherSettings.Favorites.CONTENT_URI裡面數據發生變化的時候,都會調用mModel.startLoader()介面,重新載入Launcher的數據。startLoader的具體操作,我後面分析LauncherModel類的時候會分析。這一塊涉及Launcher所有數據載入。剩下的接都是返回初始化時候創建的對象或者獲取屏幕密度、獲取是否大屏幕。後面很多處理都需要判斷是否是大屏幕,4.0以後手機平板都共用一套系統,導致多了很多處理。3、Launcher.java初始化Launcher.java是Launcher裡面最主要的類,是一個Activity。啟動的第一個組件。既然是Activity,我們要分析它初始化,毫無疑問,需要找到onCreate()裡面分析。把主要一些分析用注釋方式寫在代碼裡面,這樣比較方便閱讀。

⑺ android 7.0 launcher3 編譯報錯:

編譯過程中報錯提示如下:
make: *** No rule to make target `out/target/common/obj/JAVA_LIBRARIES/libprotobuf-Java-2.3.0-nano_intermediates/javalib.jar', needed by `out/target/common/obj/APPS/Launcher3_intermediates/classes-full-debug.jar'. Stop.

原生的SDK居然報錯,沒辦法只能著手分析了。從字面分析來看是編譯需要的protobuf jar包沒有build進去導致的,先看看是哪個相關的包。
host-libprotobuf-java-2.3.0-nano.jar這個jar包沒編譯出來,看了下源碼的mk文件,是有相關的編譯配置的,於是想想是不是有編譯依賴包相關的指令,
網上一找,還真有mma,於是mma一敲,嘩啦啦的過了。
網上有很多介紹的文章是在eclips中導入應用進行編譯的,此處就不作分析了。回頭有空研究下這些個編譯指令。。。

⑻ 怎麼在Android Launcher3源碼的主菜單界面中加入menu功能

在Launcher.java:
private static final int MENU_GROUP_WALLPAPER = 1;
/// M: menu group for settings and apps item, add for OP09.
private static final int MENU_GROUP_SETTINGS = 2;
private static final int MENU_GROUP_APPS = 3;

private static final int MENU_WALLPAPER_SETTINGS = Menu.FIRST + 1;
private static final int MENU_MANAGE_APPS = MENU_WALLPAPER_SETTINGS + 1;
private static final int MENU_SYSTEM_SETTINGS = MENU_MANAGE_APPS + 1;
private static final int MENU_HELP = MENU_SYSTEM_SETTINGS + 1;

@Override
public boolean onCreateOptionsMenu(Menu menu) {
if (isWorkspaceLocked()) {
return false;
}

super.onCreateOptionsMenu(menu);

Intent manageApps = new Intent(Settings.ACTION_MANAGE_ALL_APPLICATIONS_SETTINGS);
manageApps.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
Intent settings = new Intent(android.provider.Settings.ACTION_SETTINGS);
settings.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
String helpUrl = getString(R.string.help_url);
Intent help = new Intent(Intent.ACTION_VIEW, Uri.parse(helpUrl));
help.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK
| Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);

menu.add(MENU_GROUP_WALLPAPER, MENU_WALLPAPER_SETTINGS, 0, R.string.menu_wallpaper)
.setIcon(android.R.drawable.ic_menu_gallery)
.setAlphabeticShortcut('W');
menu.add(MENU_GROUP_APPS, MENU_MANAGE_APPS, 0, R.string.menu_manage_apps)
.setIcon(android.R.drawable.ic_menu_manage)
.setIntent(manageApps)
.setAlphabeticShortcut('M');
menu.add(MENU_GROUP_SETTINGS, MENU_SYSTEM_SETTINGS, 0, R.string.menu_settings)
.setIcon(android.R.drawable.ic_menu_preferences)
.setIntent(settings)
.setAlphabeticShortcut('P');
if (!helpUrl.isEmpty()) {
menu.add(0, MENU_HELP, 0, R.string.menu_help)
.setIcon(android.R.drawable.ic_menu_help)
.setIntent(help)
.setAlphabeticShortcut('H');
}

return true;
}

@Override
public boolean onPrepareOptionsMenu(Menu menu) {
super.onPrepareOptionsMenu(menu);
/// M: show options menu when in workspace state
if (mState == State.WORKSPACE && !mWorkspace.isInOverviewMode()) {
mWorkspace.enterOverviewMode();
}else if (mState==State.APPS_CUSTOMIZE){
return true;
}
return false;
}

熱點內容
共享雲源碼 發布:2024-09-08 10:01:10 瀏覽:393
ios應用上傳 發布:2024-09-08 09:39:41 瀏覽:439
ios儲存密碼哪裡看 發布:2024-09-08 09:30:02 瀏覽:873
opensslcmake編譯 發布:2024-09-08 09:08:48 瀏覽:653
linux下ntp伺服器搭建 發布:2024-09-08 08:26:46 瀏覽:744
db2新建資料庫 發布:2024-09-08 08:10:19 瀏覽:173
頻率計源碼 發布:2024-09-08 07:40:26 瀏覽:780
奧迪a6哪個配置帶後排加熱 發布:2024-09-08 07:06:32 瀏覽:101
linux修改apache埠 發布:2024-09-08 07:05:49 瀏覽:209
有多少個不同的密碼子 發布:2024-09-08 07:00:46 瀏覽:566