(6)Lanucher3 的启动流程(二)

14 篇文章 0 订阅

在启动流程的上一篇之中,Launcher的onCreate方法做了一些准备工作。下面就要LoaderTask上场了。

LoaderTask (1)

Activity.onCreate在接近结尾的地方调用了mModel的startLoader方法,他把LoaderTask对象放到了工作线程中。

为什么放到另外一个线程?因为加载的过程有时候会很漫长,在UI线程可能会造成ANR(如果你对Handler和HandlerThread还不太懂,请一定搞清楚Handler消息传递的机制,你一定会在将来的工作中用到他的)。这里的sWorker是一个Handler,可以传递一个Runnable对象,并在相关联的线程中执行。sWorker对应的线程是sWorkerThread,sWorkerThread在LauncherModel类加载的时候就已经开始运行了。

sWorkThread会执行LoaderTask的run方法,run方法里面最重要的就属于loadAndBindWorkspace方法了。在上面的图中,我已经画出了他的功能,先是在数据库读取数据,看看有什么需要增加,有什么需要删除;再在界面上显示。显示完了之后桌面其实也就启动完了。

loadWorkspace:

loadWorkspace有将近400行,挺多的,其实做的事情就是遍历数据库里的每条记录,判断他的类型,生成对应的ItemInfo对象(ShortcutInfo,FolderInfo,LauncherAppWidgetInfo)

bindWorkspace:

在bindWorkspace里面,用了一个很重要的Callback接口,Launcher.java实现了这些接口,用于更新UI。bindWorkspace新建了几个对象都是current*,other*形式的,这个current*代表的是当前屏的ItemInfo,other*代表的其他屏的ItemInfo,为了加载时候不让用户感觉很慢,就先把当前屏的显示出来,再显示其他的,这个显示的工作都交给了bindWorkspaceItems方法。bindWorkspaceItems会分别加载图标,小工具,和文件夹。

我们具体看下图标的情况:

加载图标用过Callback.bindItems方法来实现他必须在UI层执行,所以在bindWorkspaceItems中已经把这个调用给post到主线程去了。Callback.bindItems方法的职责就是生成图标对应的View,并把它加到CellLayout中。产生View的动作是在Launcher.createShortcut中完成的,他用一个xml布局文件生成BubbleTextView对象,并调用BubbleTextView的applyFromShortcutInfo方法设置图片和标题。View生成好了之后,用Workspace.addInScreenFromBind即可显示在UI上了,这往下就是繁琐的细节了。

文件夹和小工具的加载思路其实都是差不多的,分别调用了Callback.bindFolders和Callback.bindAppWidgets。当这些UI元素都显示完成的时候,桌面也基本上启动完了,开始等待用户操作。

一 Launcher默认界面配置(default workspace) 2 1 界面默认配置文件 2 2 LauncherProvider java的loadFavorites分析 3 Icon修改 界面布局调整 壁纸设置 5 1 图标大小和标题大小 5 2 Launcher 图标加入默认背景 6 3 更换Launcher默认壁纸 7 4 壁纸设置过程: 8 三 Launcher启动和初始化 9 1 Launcher进程启动过程 9 2 Launcher初始化――LauncherApplication 10 3 Launcher java初始化 12 1 Callbacks接口 15 2 数据加载流程 16 4 LoaderTask的run 方法 17 5 workspace加载数据 18 6 workspace绑定数据 20 7 ALL APP数据加载绑定 22 五 HotSeat分析 24 1 Hotseat配置文件 24 2 Hotseat构造函数 26 3 Hotseat加载数据 27 4 Hotseat绑定数据 27 5 Hotseat类 28 6 总结 30 六 页面滑动 PagedView 30 七 AllApp全部应用列表 AppsCustomizeTabHost 38 1 AllApp列表配置文件 38 2 AppsCustomizeTabHost分析 40 3 Tab变化时执行onTabChanged 41 八 AllApp界面拖拽元素 42 1 触摸拦截 43 2 handleTouchEvent方法 43 4 拖曳按钮 44 九 Launcher启动APP流程 45 1 WorkSpace触摸 45 2 CellLayout的onInterceptTouchEvent 方法 46 3 WorkSpace的onTouch 事件 47 4 BubbleTextView 48 5 onClick 方法 49 6 总结 50 1 常用类介绍 50 2 Launcher的数据库 51">一 Launcher默认界面配置(default workspace) 2 1 界面默认配置文件 2 2 LauncherProvider java的loadFavorites分析 3 Icon修改 界面布局调整 壁纸设置 5 1 图标大小和标题大小 5 2 Launcher 图标加入默认背景 6 3 更换Launcher默认壁纸 7 [更多]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值