读书人

Android 4.0 Launcher2源码分析起

发布时间: 2012-09-12 09:21:30 作者: rapoo

Android 4.0 Launcher2源码分析——启动过程分析

本文来自http://blog.csdn.net/chenshaoyang0011 转载请申明文章出处!

文中如有纰漏之处,望不吝指教~~~欢迎讨论,共同学习~~~

Android的应用程序的入口定义在AndroidManifest.xml文件中可以找出:


可以将Launcher.onCreate()所执行的操作大概分为七步:

1、LauncherAppliaction.setLauncher()。

2、AppWidgetHost.startListening(),对widget事件进行监听

3、checkForLocaleChange(),检查更新本地保存的配置文件

4、setupViews(),配置UI控件

5、showFirstRunWorkspaceCling(),第一次启动时显示的指导画面

6、registerContentObservers(),设置内容监听器

7、LauncherModel.startLoader(),为Launcher加载Workspace和AllApps中的内容

那么,下面就一步一步的顺着执行的过程来看Launcher启动过程中都做了些什么。

Step1:LauncherApplication.setLauncher()

调用LauncherAppliction对象的setLauncher()方法,得到一个LauncherModel对象的引用,setLauncher内容如下:


这里一共包括5个UI组件和一个DragController,那就一步一步地看都进行了哪些操作吧。

1、DragLayer

首先我们简单的认识下Draglayer。DragLayer继承自FrameLayout,是整个Launcher的根容器。当快捷图标或者AppWidget被拖拽时,事件的处理就在DragLayer进

行操作的,DragLayer.setup()方法的内容如下:


通过上面的时序图,对加载的流程基本有了认识。调用LauncherModel.startLoader()开始加载内容,内容加载完之后,通过LauncherModel.Callbacks接口定义的回

调方法,将数据返回给需要的对象。而Launcher实现了这个接口,数据将回传给Launcher。了解了基本过程之后,开始进入加载过程。

public void run() {            ......            keep_running: {                ......                if (loadWorkspaceFirst) {                    ......                    loadAndBindWorkspace();                } else {                    ......                }                if (mStopped) {                    break keep_running;                }                ......                waitForIdle();                // second step                if (loadWorkspaceFirst) {                    ......                    loadAndBindAllApps();                } else {                    ......                }                ......            }            ......        }

如果是初次启动,则loadWorkspaceFirst=true,loadAndBindWorkspace被调用,此时Workspace中的内容项将被加载并且绑定显示到Workspace中。当

Workspace中的内容加载之后,调用waitForIdle方法,以等待加载结束。确认完成之后紧接着loadAndBindAllApps()方法执行,在这个方法中将加载AllApps页面的

内容。这样加载过程就分成了两个部分:1、loadAndBindWorkspace()加载Workspace内容。2、loadAndBindAllApps()加载AllApps中的内容。这部分内容本文暂

不作深入的分析。

随着startLoader()的过程执行完毕,Launcher的初始化过程就基本上结束了。启动过程是很繁琐的,因为所有应用中需要使用到的组件都可能在启动的时候

进行配置,等到从具体的功能入手的时候,就能够更加清楚启动过程所做的操作的意义。

读书人网 >Android

热点推荐