手机状态栏信号显示流程浅析

版权声明:本文为作者原创,转载必须注明出处。

转载请注明出处:http://www.jianshu.com/p/d4e0eccb7639

最近在分析手机状态栏信号展示的一个问题,把android源码稍微撸了一下,对整个流程有了一个粗略的了解,写篇文章记录一下。代码参考的是android 7.0源码。

先来看看整个流程的时序图:

image.jpeg

Android的网络信号栏的显示刷新也是SystemUI的一部分,主要业务逻辑也是在SystemUI这模块内的,整个流程的开始是在PhoneStatusBar.java内的,

frameworks/base/packages/SystemUI/src/com/Android/systemui/statusbar/phone/PhoneStatusBar.java;

1、由PhoneStatusBar的makeStatusBarView()方法来加载布局。由于在Android系统中由三处地方会使用信号栏(状态栏、锁屏界面下的状态栏以及下拉通知栏的快捷设置区域),这三个引用处分别是status_bar.xml、keyguard_status_bar.xml、status_bar_expanded_header.xml),实例化三个对象,并在这个方法中为每一个SignalClusterView.java对象绑定两个控制器对象,NetworkControllerImpl、SecurityControllerImpl;

2、NetworkControllerImpl,继承于BroadcastReceive,实现NetworkController, 对象主要是负责作为信号栏数据控制类,onReceive中监听各种系统广播来监控比如 wifi, sim卡状态, service state ,飞行模式等。通过CallbackHandler将它自己和SignalClusterView联系起来,CallbackHandler和SignalClusterView同时实现NetworkController中的接口SignalCallback, 通过在CallbackHandler的对象中调用SignalClusterView的方法来实现NetworkControllerImpl对SignalClusterView控制通信;NetworkControllerImpl通过执行registerListeners( ) 来对所有MobileSignalController做个遍历,执行每个MobileSignalController 的registerListener(),来设置phoneStateListener监听。

3、 MobileSignalController是对订阅的广播做处理的封装类,每个广播对应一个MobileSignalController,进行数据处理与封装,主要是实现PhoneStateListener接口用来监听service state、信号强度、通话状态、移动数据连接状态,设置相应的显示图标。然后将这些状态和图标显示属性通过CallbackHandler传递给SignalClusterView对象中。

4、SignalStrength主要定义的是信号强度和显示格数的关系, getLevel( )获取手机当前信号值,强度分为0-4,0是最弱,4是最强。在MobileSignalController通过updateTelephony来封装数据(当然包含SignalStrength的level),最后通过notifyListenersIfNecessary来传递给SignalClusterView.java负责UI的刷新。

5、SignalClusterView.java通过SignalCallback的回调,调用apply()方法和内部类PhoneState的apply()方法来完成最终的界面刷新。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
禁止转载,如需转载请通过简信或评论联系作者。

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,004评论 25 709
  • 十二年前,为了将两张电影音乐cd中的三十支曲目和电影名称一一对应起来,我和好朋友每个星期三下午都会凑在她的笔记...
    dolo钊阅读 2,656评论 0 0
  • 只听楼梯响,不见人下来 只听楼梯响,不见人下来,是汉语成语,出自司马文森《风雨桐江》,比喻只是口头说说,没有实际行...
    第九棵香樟树阅读 4,334评论 0 0
  • 1. 题目 请读取出arr字符串中每个字母重复出现的次数分别是多少?如字符串arr="abcdaabc",a重复出...
    jdzhangxin阅读 4,520评论 0 4