史上最详细的Android系统SystemUI启动过程详细解析

更新时间:2023-06-23 03:17:25 阅读: 评论:0

这⾥写图⽚描述
这⾥写图⽚描述
可以看到有⼀句 ((SystemUIApplication) getApplication()).startServicesIfNeeded(),这句很关键,我们再进⼊
startServicesIfNeeded(),看看具体是如何启动系统服务的。该⽅法如下:
这⾥写图⽚描述
其中有⼀个 for 循环,循环⾥第⼀句就是将 rvice[i] 赋值给 cl, 那么rvice⾥存的是什么呢?找到 rvice[i] 的赋值如下:
这⾥写图⽚描述
看到这⾥我们就明⽩了,这⾥是拿到每个和 SystemUI 相关的类的反射,存到了 rvice[] ⾥,然后赋值给cl,紧接着将通过反射将其转化为具体类的对象,存到了mService[i]数组⾥,最后对象调 start() ⽅法启动相关类的服务,启动完成后,回调 onBootCompleted( ) ⽅法。mService[i] ⾥的值不同时,
调⽤的 start() ⽅法也不相同,这⾥我们以S ystemBars 的 start() 为例,所以mService[i].start() 先认为是SystemBars.start().
SystemBars.java 位于framework/ba/packages/SystemUI/res/com/android/systemui/statusbar/SystemBars.java ,找到
start() ⽅法:
这⾥写图⽚描述
这⾥调⽤了 mServiceMonitor.start(),旁边注释说的很清楚如果服务没有启动的话就调⽤onNoService()⽅法,进⼊ onNoService() ⽅法,该⽅法就位于 start() ⽅法下⽅,可以看到⽅法中调⽤了CreateStatusBarFromConfig() 该⽅法如下:
这⾥写图⽚描述
从中可以知道,该⽅法中先读取 l ⽂件中 config_statusBarComponent 的值,这⾥为:
com.android.systemui.statusbar.phone.PhoneStatusBar,然后通过反射得到了 PhoneStatusBar 对象,
养了一条蛇最后的 mStartus.start() 也就等于 PhoneStatusBar.start(),进⼊该⽅法,会发现,⾥⾯调⽤了super.start(),也就是先执⾏了⽗类的 start() ,其⽗类为 BaStatusBar,该类的star()⽅法较多,就不放出来了,我们看重点,找到⾥⾯有调⽤⼀个 createAndAddWindows(),该⽅法为抽象⽅法,则会调⽤它的⼦类的⽅法,这⾥也就是 PhoneStatusBar 的 createAndAddWindows()⽅法,如下:
职业高中招生
这⾥写图⽚描述
createAndAddWindows() ⾥只调⽤了 addStaBarWindow() ⽅法,⽽在该⽅法⾥,调⽤了makeStartusBarView,看名字就知道该⽅法关键,意为构建statusBar视图。该⽅法很长,⾥⾯有inflateStatusBarWindow(),进⼊该⽅法,可以看到,这么⼀句:
这⾥写图⽚描述
然后,我们通过 super_l 的分析 SystemBars 的⼤致视图构成了,super_l 代码如下:
饺子好吃这⾥写图⽚描述
博客小镇
super_l
super_l 中 include 了⼀个名称为 status_bar 的布局⽂件恶言
super_l*中 include 了⼀个名称为 status_bar_expanded 的布局⽂件
香蕉的营养价值
这⾥的 status_bar 便是系统状态栏的布局⽂件,status_bar_expanded 便是下拉的通知窗⼝的布局⽂件
上述 super_l 与如下视图对应:
花园散步
这⾥写图⽚描述
猴成语
PhoneStatusBarView 即为⼿机最上⽅的状态栏,主要⽤于显⽰系统状态,通知等,主要包括 notification icons 和 status bar icons。l 即对应状态栏的视图如下:

本文发布于:2023-06-23 03:17:25,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/1018090.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:启动   服务   系统   写图   反射   视图   通知
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图