2024年3月30日发(作者:)

LauncherProvider解析

Launcher是由ActivityManagerService启动的,而ActivityManagerService和

PackageManagerService一样,都是在开机时由SystemServer组件启动的,SystemServer组件

首先是启动PackageManagerServic,由它来负责安装系统的应用程序,系统中的应用程序安

装好了以后,SystemServer组件接下来就要通过ActivityManagerService来启动Home应用

程序Launcher了,Launcher在启动的时候便会通过PackageManagerServic把系统中已经安

装好的应用程序以快捷图标的形式展示在桌面上,这样用户就可以使用这些应用程序了。

一、整个Launcher的入口点

1、

继承了Application类,当整个Launcher启动时,它就是整个程序的入口。由

文件可以看到整个Launcher的代码结构,如下:

在中的配置

android:name="erApplication"

android:label="@string/application_name"

android:icon="@drawable/ic_launcher_home"

android:hardwareAccelerated="@bool/config_hardwareAccelerated"

android:largeHeap="@bool/config_largeHeap">

android:name:指定了整个Launcher的Application也就是入口是在

erApplication这个路径下。

android:label:指定了桌面的名字是叫 Launcher,如果要改名字就改values文件夹的

中的相应属性就可以了。

android:icon:指定了Laucher的图标,这个图标可以在应用程序管理器中看见。如果需要

更改Laucher的图片,重新设置这个属性就可以了。

android:hardwareAccelerated:指定了整个应用程序是启用硬件加速的,这样整个应用

程序的运行速度会更快。

android:largeHeap:指定了应用程序使用了大的堆内存,能在一定程度上避免,对内存out

of memory错误的出现。可以在values文件夹的中看到对是否启用硬件加速

和大内存的配置。如下:

true

false

2、LauncherApplication中onCreate()方法:

public class LauncherApplication extends Application {

public LauncherModel mModel;

public IconCache mIconCache;

private static boolean sIsScreenLarge;

private static float sScreenDensity;

WeakReference mLauncherProvider;

@Override

public void onCreate() {

te();

// set sIsScreenXLarge and sScreenDensity *before* creating icon cache

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

LAYOUT_SIZE_MASK;

sIsScreenLarge = screenSize == LAYOUT_SIZE_LARGE ||

screenSize == LAYOUT_SIZE_XLARGE;

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

mIconCache = new IconCache(this);

mModel = new LauncherModel(this, mIconCache);

// Register intent receivers

IntentFilter filter = new IntentFilter(_PACKAGE_ADDED);

ion(_PACKAGE_REMOVED);

ion(_PACKAGE_CHANGED);

aScheme("package");

registerReceiver(mModel, filter);

filter = new IntentFilter();

ion(_EXTERNAL_APPLICATIONS_AVAILABLE);

ion(_EXTERNAL_APPLICATIONS_UNAVAILABLE);

ion(_LOCALE_CHANGED);

ion(_CONFIGURATION_CHANGED);

registerReceiver(mModel, filter);

filter = new IntentFilter();