在SystemUI之功能介绍和UI布局实现 曾挖了一个坑,最近手头项目快结尾了,开始补坑。本篇基于AndroidL分析SystemUI的启动流程。
SystemUI主体框架启动流程
AndroidL上SystemUI是以Application的形式存在的,本质上来讲它和我们平时常见的App一样,只是它被放在了Frameworks包下,开机自启动,且能获取到的系统权限比普通应用要高。既然它也是一个App,那么分析之前不妨从AndroidManifest文件入手,SystemUI代码位于:
frameworks/base/packages/SystemUI
打开AndroidManifest文件,可以看到和一般应用一样注册了一堆activity/service/receiver组件,但没有provider组件。摘录主要的组件
<application
android:name=".SystemUIApplication"
android:persistent="true"
android:allowClearUserData="false"
android:allowBackup="false"
android:process="com.android.systemui"
android:supportsRtl="true"
android:theme="@style/systemui_theme">
...
<!-- Keep theme in sync with SystemUIApplication.onCreate().
Setting the theme on the application does not affect views inflated by services.
The application theme is set again from onCreate to take effect for those views. -->
<service android:name="SystemUIService"
android:exported="true"
/>
仔细浏览Manifest文件我们发现Activity组件里没有我们常见的
<category android:name="android.intent.category.LAUNCHER" />
这也是systemui没有出现在系统应用列表里的原因。那么看到这问题来了,一般的应用我们是通过点击桌面的应用图标来启动的,那么SystemUI在开机完成后就立马呈现出来了,是谁将它在什么时候启动的呢?
注意