Android的Launcher啟動流程 “Launcher部分啟動流程”

來源:互聯網
上載者:User

標籤:簽名   分享   com   資料   intent   blog   xml檔案   ble   tco   

研究代碼從:AndroidManifest.xml、自訂的Application.java開始。

Android系統啟動時,系統需要一個Home應用程式來負責將這些應用程式展示出來;也就是該應用的目的在於:Android系統啟動後,第一個啟動的應用程式。在Android系統中,這個預設的Home應用程式就是Launcher。

要把某個應用程式作為Home,只需要在Android.xml檔案中添加一個category:

<intent-filter>    <action android:name="android.intent.action.MAIN" />    <category android:name="android.intent.category.DEFAULT" />    <category android:name="android.intent.category.HOME" />    <category android:name="com.aliyun.ushell.action.detailpage" /></intent-filter>

對於AndroidManifest.xml檔案中的幾個屬性說明:

<manifest    xmlns:android="http://schemas.android.com/apk/res/android"    package="com.aliyun.ushell"  coreApp="true" android:sharedUserId="android.uid.system"    android:versionCode="2"    android:versionName="1.2.3"     >

其中android:sharedUserId決定是否需要系統簽名;android:theme決定整個應用的theme和style;andrid:debuggable決定應用是否處於偵錯模式。

疑問:

1. Launcher是如何被啟動的?Android系統為什麼在啟動時會預設啟動Launcher?

2. Launcher主要做什麼工作?

Android系統開機會啟動Launcher,Launcher是由ActivityManager啟動的,而ActivityManager是由SystemServer啟動。

此處就用到了在AndroidManifest.xml檔案中添加的intent-filter屬性值:category_home。一般綁定使用上述的三個category,也就是關鍵詞:main/default/home。

Launcher的主要工作是:監聽應用的安裝、更新、刪除等導致Launcher資料庫變化的操作。Launcher資料都是使用ContentProvider來提供資料,也就是需要自訂ContentResolver監聽指定Uri資料的變化。

private final ContentObserver mObserver = new ContentObserver(new Handler()) {    @Override    public void onChange(boolean selfChange, Uri uri) {        final int nightSwitch = Global.getInt(UShellApplication.this.getContentResolver(), SWITCH_KEY, -1);        final int nightOn = Global.getInt(UShellApplication.this.getContentResolver(), ON_KEY, -1);        final boolean wallpaperOn = (Global.getInt(UShellApplication.this.getContentResolver(), WALLPAPER_KEY, DEFAULT_WALLPAPER) == 1);        mWallpaperOn = wallpaperOn;        if (readTime() || nightSwitch != mNightSwitch || nightOn != mNightOn) {            mNightSwitch = nightSwitch;            mNightOn = nightOn;            if (!Utilities.IS_ZHONGHONG) {                onTimeChanged();            } else {                onZHChanged(null);            }        }    }};

Launcher啟動的過程主要就是載入介面資料然後顯示出來,介面資料都是系統App有關的資料(可能包含Launcher資料庫)。

Android的Launcher啟動流程 “Launcher部分啟動流程”

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.