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

当我们在Launcher界面单击一个应用程序图标时就会启动一个程序,那这一个过程究竟发生了些哪样呢?让我们跟踪Launcher源码来分析一下吧。

先上流程图:

7ba92cda52cd082abe3165551f999e94.png

step1、追踪Launcher  从源码中我们可以发现Launcher其实也是一个程序,它继承于Activity。找到该文件中的onCreate()方法,代码片段如下:

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

LauncherApplication app = ((LauncherApplication)getApplication());

mModel = app.setLauncher(this);

mIconCache = app.getIconCache();

mDragController = new DragController(this);

mInflater = getLayoutInflater();

mAppWidgetManager = AppWidgetManager.getInstance(this);

mAppWidgetHost = new LauncherAppWidgetHost(this, APPWIDGET_HOST_ID);

mAppWidgetHost.startListening();

if (PROFILE_STARTUP) {

android.os.Debug.startMethodTracing("/sdcard/launcher");

}

loadHotseats();

checkForLocaleChange();

setWallpaperDimension();

setContentView(R.layout.launcher);

setupViews();

registerContentObservers();

lockAllApps();

mSavedState = savedInstanceState;

restoreState(mSavedState);

if (PROFILE_STARTUP) {

android.os.Debug.stopMethodTracing();

}

if (!mRestoring) {

mModel.startLoader(this, true);

}

找到关键部分,也就是上面被标注红色代码。mModel是LauncherModel类型对象,接下来我们跟踪LauncerModel.java文件。

step2、  `LauncherModel是一个BroadcastReceiver,在这里我们先进入startLoader(Context context, boolean isLaunching) 方法。

dd72c29e0a5b849ec7b69e031ed54aea.png

LoaderTask实现了Runnable接口,接着我们再找到该实现类的run()方法,代码片段如下:

41363b1c36883df505f8701562d0a6a7.png

读取系统中各应用主Activity的信息代码片段如下:

13b5ddd1b31135974ba2dfbef41cb9ed.png

step3、当我们单击应用程序图标时所执行的对应方法为Launcher.java里的onClick()方法,其代码如下:

0d6e77a01f0849c2234ee2e329eacaf0.png

d49bbff2e96378a2051f5533dda49ff1.png

到此就对应用程序的启动过程分析结束了,欢迎各位网友的指正和建议,以其共同进步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值