Android M Launcher3主流程源码浅析,爆火的Android面试题

LauncherAppState:单例对象,构造方法中初始化对象、注册应用安装、卸载、更新,配置变化等广播。这些广播用来实时更新桌面图标等,其receiver的实现在LauncherModel类中,LauncherModel也在这里初始化。

LauncherModel:数据处理类,保存桌面状态,提供读写数据库的API,内部类LoaderTask用来初始化桌面。

InvariantDeviceProfile:一些不变的设备相关参数管理类,其内部包涵了横竖屏模式的DeviceProfile。

WidgetPreviewLoader:存储Widget信息的数据库,内部创建了数据库widgetpreviews.db。

LauncherAppsCompat:获取已安装App列表信息的兼容抽象基类,子类依据不同版本API进行兼容性处理。

AppWidgetManagerCompat:获取AppWidget列表的兼容抽象基类,子类依据不同版本API进行兼容性处理。

LauncherStateTransitionAnimation:各类动画总管处理执行类,负责各种情况下的各种动画效果处理。

IconCache:图标缓存类,应用程序icon和title的缓存,内部类创建了数据库app_icons.db。

LauncherProvider:核心数据库类,负责launcher.db的创建与维护。

LauncherAppWidgetHost:AppWidgetHost子类,是桌面插件宿主,为了方便托拽等才继承处理的。

LauncherAppWidgetHostView:AppWidgetHostView子类,配合LauncherAppWidgetHost得到HostView。

LauncherRootView:竖屏模式下根布局,继承了InsettableFrameLayout,控制是否显示在状态栏等下面。

DragLayer:一个用来负责分发事件的ViewGroup。

DragController:DragLayer只是一个ViewGroup,具体的拖拽的处理都放到了DragController中。

BubblTextView:图标都基于他,继承自TextView。

DragView:拖动图标时跟随手指移动的View。

Folder:打开文件夹展示的View。

FolderIcon:文件夹图标。

DragSource/DropTarget:拖拽接口,DragSource表示图标从哪开始拖,DropTarget表示图标被拖到哪去。

ItemInfo:桌面上每个Item的信息数据结构,包括在第几屏、第几行、第几列、宽高等信息;该对象与数据库中记录一一对应;该类有多个子类,譬如FolderIcon的FolderInfo、BubbleTextView的ShortcutInfo等。

有了上面这些基本解释,下面我们来看看Launcher启动主流程的加载吧,如下:

这里写图片描述

可以发现,Launcher3的Activity加载其实和其他应用没啥区别的,也是一样的流程,只是我们需要特别注意上图中红色的两步。在setContentView之后我们其实又进行了一次依据设备属性的layout操作,接着才进行异步数据加载的,所以我们的重点会放在LauncherModel的loader方法中。

在启动Launcher时数据加载绑定其实分了两大类,workspace与allApps(widgets)的加载,他们都是通过异步加载回调UI绑定数据的,下面我们先看下workspace的加载绑定流程,如下:

这里写图片描述

可以发现,到此其实UI和数据都已经显示OK了,我们接着关注一下AllApps和Widget的加载流程,如下:

这里写图片描述

至此再回过头你会发现Launcher的主加载绑定流程就这么多。说着容易,其实这其中都涉及非常多的细节,我们不展开分析了(因为我也没细看,呜呜),等用到时再做分析。

有了上面这些图,相信你再打开Android M Launcher3源码进行阅读时就能有个大致框架了,代码也就不贴了,只为记录而已。

【工匠若水 http://blog.csdn.net/yanbober 未经允许严禁转载,请尊重作者劳动成果。私信联系我】

总结

======

可以发现,其实Launcher没啥特殊的,只是考虑的问题比较多而已,本文只是给出主流程,细节还需自己继续扣,略显潦草,没办法,没时间,只能这样。下一次分享托拽按压相关主流程。

这里写图片描述

结尾

我还总结出了互联网公司Android程序员面试涉及到的绝大部分面试题及答案,并整理做成了文档,以及系统的进阶学习视频资料,免费分享给大家。
(包括Java在Android开发中应用、APP框架知识体系、高级UI、全方位性能调优,NDK开发,音视频技术,人工智能技术,跨平台技术等技术资料),希望能帮助到你面试前的复习,且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。

领取方式:关注+点赞+点击我的GitHub 免费获取!

%BC%80%E5%8F%91%E4%B8%8D%E4%BC%9A%E8%BF%99%E4%BA%9B%EF%BC%9F%E5%A6%82%E4%BD%95%E9%9D%A2%E8%AF%95%E6%8B%BF%E9%AB%98%E8%96%AA%EF%BC%81.md)!**

Android M Launcher3主流程源码浅析,爆火的Android面试题_第1张图片

你可能感兴趣的:(程序员,架构,移动开发,android)