Launcher8.0启动流程的第六步中loadworkspace的第1小步是获取数据库,首先完成第一个操作,判断有没有现成的数据库,如果没有现成数据库,则创建一个新的数据库,并且从手机中读取相应的布局。
也就是第1小步的第二个操作,寻找布局文件的范围。
loadDefaultFavoritesIfNecessary其源码如下:
synchronized private void loadDefaultFavoritesIfNecessary() {
SharedPreferences sp = Utilities.getPrefs(getContext());
if (sp.getBoolean(EMPTY_DATABASE_CREATED, false)) {
Log.d(TAG, "loading default workspace");
AppWidgetHost widgetHost = mOpenHelper.newLauncherWidgetHost();
AutoInstallsLayout loader = createWorkspaceLoaderFromAppRestriction(widgetHost);
if (loader == null) {
loader = AutoInstallsLayout.get(getContext(),widgetHost, mOpenHelper);
}
if (loader == null) {
final Partner partner = Partner.get(getContext().getPackageManager());
if (partner != null && partner.hasDefaultLayout()) {
final Resources partnerRes = partner.getResources();
int workspaceResId = partnerRes.getIdentifier(Partner.RES_DEFAULT_LAYOUT,
"xml", partner.getPackageName());
if (workspaceResId != 0) {
&nb

本文深入剖析Android Launcher8.0的启动流程,特别是LoadWorkspace的第1小步,主要关注如何寻找并加载布局XML。内容涉及从数据库、特殊限制、自定义配置和第三方应用四个方面尝试获取布局,最后使用默认布局作为备选方案。

被折叠的 条评论
为什么被折叠?



