【源码剖析】Launcher 8.0 源码 (19) --- Launcher 启动流程 第六步之BindWorkspace 第1小步创建屏幕

本文详细介绍了Android Launcher 8.0启动流程中的BindWorkspace步骤,这一过程涉及将图标从sBgDataModel加载到桌面。首先创建屏幕,然后根据屏幕ID将图标分配到对应屏幕。源码分析包括创建屏幕、筛选当前屏幕图标、整理图标顺序以及启动屏幕绑定等关键操作,为理解Launcher工作原理提供了深入洞察。
摘要由CSDN通过智能技术生成

Launcher8.0启动流程的第六步startLoader的第一步Loadworkspace完成,接着是第二步bindworkspace。 这一步将sBgDataModel中的图标放到桌面上。 放置的时候需要先创建屏幕而后才能将图标放到屏幕里。

 

源码如下:

private void bindWorkspace(int synchronizeBindPage) {
    final long t = SystemClock.uptimeMillis();
    Runnable r;

//启动流程Launcher调用LauncherModel的方法startLoader,而LauncherModel又会调用Launcher的方法来完成startLoader的操作。在Launcher的启动流程的第三步创建必须的对象中创建的第二个对象是LauncherModel的对象,在创建的时候传入了Launcher本身,而这个Launcher的对象在LauncherMedel类里面叫做Callbacks。随后的方法  final Callbacks oldCallbacks = mCallbacks.get();就是获取Launcher对象。


    final Callbacks oldCallbacks = mCallbacks.get();
    if (oldCallbacks == null) {
        Log.w(TAG, "LoaderTask running with no launcher");
        return;
    }

//随后将sBgDataModel里面存储的桌面布局信息放到LauncherModel的集合里面,这样方便使用这些信息。一共创建了三个信息,屏幕数,桌面图标,桌面widget。后面将按照屏幕数、桌面图标、桌面widget依次绘制。

ArrayList<ItemInfo> workspaceItems = new ArrayList<>();
    ArrayList<LauncherAppWidgetInfo> appWidgets = new ArrayList<>();
    ArrayList<Long> orderedScreenIds = new ArrayList<>();

    synchronized (sBgDataModel) {
        workspaceItems.addAll(sBgDataModel.workspaceItems);
        appWidgets.addAll(sBgDataModel.appWidgets);
        orderedScreenIds.addAll(sBgDataModel.workspaceScreens);
    }
//图标信息到位之后,先找到当前屏幕。获取屏幕的id,屏幕的id是0,1,2这个顺序,且严格按照这个顺序。比如Id为1,则必定是从左往右的第2个屏幕。在图标信息iteminfo里面存有每个图标的screenid信息。
    final int currentScreen;
    {
        int currScreen = synchronizeBindPage != PagedView.INVALID_RESTORE_PAGE
                ? synchron

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值