您的位置:首页 > 移动开发 > Android开发

Android launcher 开发笔记(三) 启动过程分析 part 1

2016-07-21 14:32 363 查看
在启动Launcher这个Activity之前,先看下桌面的LauncherApplication吧,任何一个组件(Component)启动之前都会启动他的。代码只有寥寥几行。

LauncherAppState我们在上一篇博客里面说过,主要用来初始化对象,注册广播接收器等等,这些都在他的构造方法里面完成了。这里监听的广播有应用的安装、卸载和更新,SD卡上应用的可用或不可用,地区变化和配置变化等等。接收应用安装更新什么的广播,都是为了方便实时更新桌面上的图标,如果用豌豆荚安装了应用会在桌面上马上显示出来,这都是这些个广播接收器在发挥作用。需要注意的是贯穿始终的LauncherModel就是在这个构造方法里初始化的。

准备工作做好了,就开始启动Launcher Activity。Activity的启动从onCreate开始查找。

和helloworld程序不同的是,Launcher是在做了一系列初始化操作之后才进行setContentView,目的应该是方便界面上的View来获取初始化的这些对象。我们从一些成员的初始化开始看起。

mSharedPrefs: 之前我们说过,桌面在第一次启动的时候会有一个指导界面,告诉用户怎么使用,在以后的启动中,就不会再出现了。控制这个逻辑就是通过SharedPreference,他以key-value的形式把信息存储到一个xml文件当中。
mModel: LauncherModel的对象,他是通过LauncherAppState.setLauncher(..)方法获得的,在其中执行了LauncherModel.initialize(..)方法,他给LaucherModel传递了一个CallBacks对象(在Launcher.java中定义)。为什么要传这个对象呢,因为LauncherModel主要是负责数据层的东西,界面方面的操作都交给了Launcher来做,那当LauncherModel需要更新界面的时候怎么操作呢,就是通过调用这些个回调函数来完成的。
mIconCache: 从名字就可以看出是用来做缓存的,桌面的图标这么多,IconCache用来提高性能。
mDragController: 用来控制拖拽对象的东西,到后面会和DragLayer结合起来。
mInflater: 在图标加载的时候,会一个一个去生成BubbleTextView,而这些都是通过mInflater.inflate(..)方法从xml生成出来的,使用次数还是挺多的,详情参加Launcher.creatShortcut方法。
mAppWidgetManager用来管理小工具,mAppWidgetHost用来生成小工具的View对象并更新。
下面就到setContentView(R.layout.launcher)了,显示界面,有了界面之后会通过setupViews()方法吧view对象和之前初始化过的DragController等东西结合起来。跳进函数看一下,一大溜的findViewById,为的就是获取UI对象。我们在
这篇 里面讲述的界面元素的对象基本都是在这里获得的,基本上都会通过setup方法和DragController联系起来,然后设置下onClickListener,onLongClickListener。

下面是往下走最重要的地方了,找到LauncherModel的startLoader方法调用地方。接下来整个过程都跳转到LauncherModel里面了,在这里会读取数据库,确定哪些东西要加载到桌面上,加载的顺序等等。显示到UI是在Launcher里面的,而这中间的桥梁,就是上文提到的Callbacks,这桥梁上传递的东西,就是ItemInfo,我将会在下一篇博文中详细讲解ItemInfo。而桌面启动流程的后半截,会在ItemInfo之后再续。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: