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

研究代码从: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数据库)。

时间: 2024-10-28 19:01:24

Android的Launcher启动流程 “Launcher部分启动流程”的相关文章

Android应用程序启动过程——Launcher源码分析

当我们在Launcher界面单击一个应用程序图标时就会启动一个程序,那这一个过程究竟发生了些哪样呢?让我们跟踪Launcher源码来分析一下吧. 先上流程图: step1.追踪Launcher  从源码中我们可以发现Launcher其实也是一个程序,它继承于Activity.找到该文件中的onCreate()方法,代码片段如下: protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceSta

【转】Android 4.0 Launcher2源码分析——启动过程分析

Android的应用程序的入口定义在AndroidManifest.xml文件中可以找出:[html] <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.android.launcher">  <original-package android:name="com.android.launcher2" /> .

&lt;转&gt;深入理解Activity启动流程(一)–Activity启动的概要流程

本文原创作者:Cloud Chou. 原文地址:http://www.cloudchou.com/android/post-788.html Android中启动某个Activity,将先启动Activity所在的应用.应用启动时会启动一个以应用包名为进程名的进程,该进程有一个主线程,叫ActivityThread,也叫做UI线程. 本系列博客将详细阐述Activity的启动流程,这些博客基于Cm 10.1源码研究. 深入理解Activity启动流程(二)--Activity启动相关类的类图 深

Android更改桌面应用程序launcher的两种方式

版权声明:本文为博主原创文章,未经博主允许不得转载. launcher,也就是Android的桌面应用程序.下图是我正在使用的魅族手机的launcher应用程序: 接下来我们要开发一个自己的launcher,使其替代系统的默认launcher. 怎样使我们的应用程序成为一个launcher? 首先我们要有一个自己的Android应用,在这里,我使用最简单的应用程序Hello, 使用eclipse创建Android项目我这里就省略了,直接上图 来看看我的AndroidManifest.xml [c

android 系统存在多个Launcher时,设置开机自动进入默认的Launcher

开机完成并解锁后,如果android系统存在多个Launcher,系统会弹出一个选择框让用户选择进入某个Launcher.如果用户不想选择,而是想直接进入某一个默认的Launcher,要怎么修改? 注意:此修改方法对Google Now Launcher(GoogleHome.apk)无效,因为此APP启动Activity的<intent-filter>中无<category android:name="android.intent.category.HOME" /&

什么时候加上android.intent.category.DEFAULT和LAUNCHER

转自:http://blog.csdn.net/ccccdddxxx/article/details/7843070 1.要弄清楚这个问题,首先需要弄明白什么是implicit(隐藏) intent什么是explicit(明确) intent. Explicit Intent明确的指定了要启动的Acitivity ,比如以下Java代码: Intent intent= new Intent(this, B.class) Implicit Intent没有明确的指定要启动哪个Activity ,而

关于android使用自己的launcher替换默认launcher的方法

关于android使用自己的launcher替换默认launcher的方法 有时候,你可能希望用你自己的launcher程序替换默认的android launcher2和launcher3.而且希望作为系统起来就启动你的launcher程序,而不需要用户选择. 特别是如果你的launcher程序和默认launcher程序共存时,即使你的launcher已经被用户选择为默认启动launcher,突然运行时,你的程序出现crash,那么系统会再次弹出选择哪个launcher进行启动的选择框,而不是直

Android性能优化(一)之启动加速35%

一.前言 随着项目版本的迭代,App的性能问题会逐渐暴露出来,而好的用户体验与性能表现紧密相关,从本篇文章开始,我将开启一个Android应用性能优化的专题,从理论到实战,从入门到深挖,手把手将性能优化实践到项目中,欢迎持续关注! 那么第一篇文章我就从应用的启动优化开始,根据实际案例,打造闪电般的App启动速度. 二.初识启动加速 来看一下Google官方文档<Launch-Time Performance>对应用启动优化的概述: 应用的启动分为冷启动.热启动.温启动,而启动最慢.挑战最大的就

深入剖析Android四大组件(二)——Service服务之启动与绑定

如果说Activity通常都会提供一个用户界面UI的话,那么服务则不会提供任何用户界面,尽管如此,服务的作用仍然非常重要,它为我们提供了一种类似守护线程的手段来维持一些希望在退出以后仍然能持续运行的程序. 1.服务 既然服务的作用如此重要,本篇主要讲解如何使用服务和声明应用程序服务,下一节讲解怎么高效率的运用服务. ①何为服务 服务是一个应用程序组件,它在后台执行运行时间比较长的操作,不提供用户界面.它可以被其他应用程序组件启动或停止,并且当用户切换到另一个应用程序时,它仍然在后台持续的运行.另