本文将以代码走读的形式讲解Launcher3的启动过程,主要包括数据的加载,到界面的生成过程
1、入口Launcher.java
@Override
protected void onCreate(Bundle savedInstanceState) {
...
// 1)加载布局
setContentView(R.layout.launcher);
setupViews();
registerContentObservers();
...
// 2)LauncherModel开始加载数据
<pre class="html" name="code"> if (!mRestoring) {
if (sPausedFromUserAction) {
mModel.startLoader(true, -1);
} else {
mModel.startLoader(true, mWorkspace.getCurrentPage());
}
}
...
}
2、数据加载LauncherModel,LauncherModel相当于Launcher的Controller
public void startLoader(boolean isLaunching, int synchronousBindPage) {
synchronized (mLock) {
...
if (mCallbacks != null && mCallbacks.get() != null) {
...
// 启动mLoaderTask来加载数据,LoaderTask是一个实现了Runnable方法的内部类
mLoaderTask = new LoaderTask(mApp.getContext(), isLaunching);
if (synchronousBindPage > -1 && mAllAppsLoaded && mWorkspaceLoaded) {
mLoaderTask.runBindSynchronousPage(synchronousBindPage);
} else {
sWorkerThread.setPriority(Thread.NORM_