Launcher8.0启动流程的第六步生成布局,Launcher启动流程中最重要,最复杂,也是网上各种关于Launcher讲解的最浓墨淡彩描述的部分。
第六步onCreate中源码如下:
if (!mModel.startLoader(currentScreen)) {
mDragLayer.setAlpha(0);
} else {
mWorkspace.setCurrentPage(currentScreen);
setWorkspaceLoading(true);
}
那么最关键的一行代码是mModel.startLoader(currentScreen)。这代码是让LauncherModel开始读取应用的。包括桌面的布局和allapp的应用,将所有应用和图标放到之前我们规划好的几行几列的格子里面。返回false表示读取失败,这时候会走mDragLayer.setAlpha(0),如果布局读取失败则将整个mDragLayer都不显示也就是桌面一片空白,而正常情况都是读取成功
于是重点就是mModel.startLoader(currentScreen)此方法。
startLoader的源码如下:
public boolean startLoader(int synchronousBindPage) {
InstallShortcutReceiver.enableInstallQueue();
synchronized (mLock) {
mLoaderTask = new LoaderTask(mApp.getContext(), synchronousBindPage);
if (synchronousBindPage != PagedView.INVALID_RESTORE_PAGE
&& mModelLoaded && !mIsLoaderTaskR