Launcher源码学习记录(一)

来源:互联网 发布:plc控制电机正反转编程 编辑:程序博客网 时间:2024/06/08 11:00

Launcher的Manifest.xml文件中,指定了applicaton的name属性为com.android.launcher2.LauncherApplication,LauncherApplication继承了Application类,该类的onCreate方法也成为了整个Launcher程序的入口。

在Manifest.xml中,有package和original-package两个属性,package="com.android.launcher"是程序运行时的进程名(之所以叫package,我的理解是,java程序都是以包的形式存在于系统中的),original-package="com.android.launcher2"则是源代码的包名。于是在Manifest.xml中,会发现有的地方用com.android.launcher2,有的地方用com.android.launcher,这主要取决于相关组件/权限/元素是面向编译的,还是面向运行的。比如activity的name,是为了定位源码中对应的activity类的,因此就是com.android.launcher2.xxxx,而permission、action这种在运行时使用的字符串常量,则是com.android.launcher.xxxx.....以此类推。

说点题外话,Manifest.xml里是可以定义多个application的,且eclipse不会给出任何错误或警告提示,这一度给我造成了一些困惑,认为多个application标签的设计提供了一种机制,使得其子组件(activity,service,provider,receiver)得以在某种层面得到封装,事实证明我想多了……写一个小demo测试一下发现,只有第一个application被识别了,后面的application标签内的所有内容都直接被当做注释无视掉了。

回到Launcher中来,LauncherApplication复写了基类Application的OnCreate方法,跟踪调试,发现Application.onCreate()是由Instrumentation.callApplicationOnCreate()调用的,而后者又是由ActivityThread.handleBindApplication()调用的,结合源码认识到,android程序启动时,首先创建应用进程,对应的类是ActivityThread,并创建该进程的Looper和Handler,之后以消息的形式通知ActivityThread完成Application的创建、Activity的启动……

0 0
原创粉丝点击