码迷,mamicode.com
首页 > 移动开发 > 详细

Android的Launcher启动流程 “Launcher部分启动流程”

时间:2017-02-13 23:20:50      阅读:462      评论:0      收藏:0      [点我收藏+]

标签:签名   分享   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部分启动流程”

标签:签名   分享   com   数据   intent   blog   xml文件   ble   tco   

原文地址:http://www.cnblogs.com/CVstyle/p/6395694.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!