Launcher8.0启动流程的第六步中loadworkspace的第1小步是获取数据库,在没有布局时,需要读取手机上的布局xml文件,通过第三个操作我们创建了新的数据库并选取了xml文件那么如何解析该xml文件呢?
答案是loadFavorites方法
该方法把loader对应的xml布局文件放到数据库中。
源码如下:
int loadFavorites(SQLiteDatabase db, AutoInstallsLayout loader) {
ArrayList<Long> screenIds = new ArrayList<Long>();
int count = loader.loadLayout(db, screenIds);
Collections.sort(screenIds);
int rank = 0;
ContentValues values = new ContentValues();
for (Long id : screenIds) {
values.clear();
values.put(LauncherSettings.WorkspaceScreens._ID, id);
values.put(LauncherSettings.WorkspaceScreens.SCREEN_RANK, rank);
if (dbInsertAndCheck(this, db, WorkspaceScreens.TABLE_NAME, null, values) < 0) {
throw new RuntimeException("Failed initialize screen table"
+ "from default layout");
}
rank++;
}
return count;
}
}
从代码直观看,获取了screen的id并通过dbInsertAndCheck()方法存入数据库。
在此之前,int count = loader.loadLayout(db, screenIds); 此方法完成了桌面图标的数据库写入,源码如下:
public int loadLayout(SQLiteDatabase db, ArrayList<Long> screenIds) {
return parseLayout(mLayoutId, screenIds);
}
protected int parseLayout(int layoutId, ArrayList<Long> screenIds)
throws XmlPullParserException, IOException {
XmlResourceParser parser = mSourceRes.getXml(layoutId);
beginDocument(parser, mRootTag);
final