【源码剖析】Launcher 8.0 源码 (16) --- Launcher 启动流程 第六步之LoadWorkspace 第1小步(4)解析布局xml文件

本文深入探讨了Android Launcher 8.0的启动流程,重点在于LoadWorkspace的首步骤,即解析布局XML文件。通过`loadFavorites`和`parseLayout`方法,将XML布局解析并存储到数据库中。解析过程涉及`TagParser`,如AppShortcut和Widget,用于创建应用图标和小部件。解析完成后,数据插入到数据库,为Launcher的启动和桌面布局提供基础。
摘要由CSDN通过智能技术生成

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值