System UI学习笔记(二)
System UI学习笔记(二)
既然我需要学习System UI,那么我想知道这个UI是怎么启动的?
前面了解到,这没有入口activity,是通过服务启动的。
frameworks/base/servicesjava/com/android/server/SystemServer.java(下面的服务路径)
SystemUIService服务进程启动,那么我们看一下SystemServer的源码(一开始我在SystemUI里面没找到,才发现压根不在里面哈哈哈哈)。
上面这个run()方法会一次启动Android系统服务,通过了解,AMS是在startOtherServices()方法中启动,那么我们来看一下源码(代码块):
展示代码
mActivityManagerService.systemReady(() -> {
...省略代码
t.traceBegin("StartSystemUI");
try {
startSystemUi(context, windowManagerF);/* 核心启动代码*/
} catch (Throwable e) {
reportWtf("starting System UI", e);
}
t.traceEnd();
...省略代码
其次,在AMS启动完成后,回调systemReady如上,在其中调用startSystemUI()方法启动了SystemUI。
private static void startSystemUi(Context context, WindowManagerService windowManager) {
PackageManagerInternal pm = LocalServices.getService(PackageManagerInternal.class);
Intent intent = new Intent();
intent.setComponent(pm.getSystemUiServiceComponent());
intent.addFlags(Intent.FLAG_DEBUG_TRIAGED_MISSING);
//Slog.d(TAG, "Starting service: " + intent);
context.startServiceAsUser(intent, UserHandle.SYSTEM);
windowManager.onSystemUiStarted();
}
SystemUIService逻辑也是比较简单的,启动之后主要调用SystemUIApplication的startServicesIfNeeded()方法。
了解了SystemUI是怎么启动的之后,我们想知道通知视图是怎么跨进程显示,带着这个疑问,我们在继续学习了解一下。😍
本文来自博客园,作者:include_chen,转载请注明原文链接:https://www.cnblogs.com/include-chen/p/16393823.html