安卓面经PowerManagerService待机流程_12

牛客高级系列专栏:

安卓(安卓系统开发也要掌握)

嵌入式

  • 本人是2020年毕业于广东工业大学研究生:许乔丹,有国内大厂CVTE和世界500强企业安卓开发经验,该专栏整理本人从嵌入式Linux转Android系统开发过程中对常见安卓系统开发面试题的理解;
  • 1份外卖价格助您提高安卓面试准备效率,为您面试保驾护航!!

正文开始⬇

1 系统准备工作

在PowerManagerService创建之后会调用systemReady做一些初始化相关的操作,获取与PowerManager相关的本地服务:

public void systemReady(IAppOpsService appOps) {  
      synchronized (mLock) {  
          //第一步:初始化相关的变量  
          mSystemReady = true;  
          mAppOps = appOps;  
          mDreamManager = getLocalService(DreamManagerInternal.class);  
          //初始化互动屏保管理  
          mDisplayManagerInternal = getLocalService(DisplayManagerInternal.class);  
          //初始化屏幕显示管理服务  
          mPolicy = getLocalService(WindowManagerPolicy.class);  
          mBatteryManagerInternal = getLocalService(BatteryManagerInternal.class);  
          //初始化电池管理服务  

          PowerManager pm = (PowerManager) 
                      mContext.getSystemService(Context.POWER_SERVICE);  
          mScreenBrightnessSettingMinimum = pm.getMinimumScreenBrightnessSetting();  
          mScreenBrightnessSettingMaximum = pm.getMaximumScreenBrightnessSetting();  
          mScreenBrightnessSettingDefault = pm.getDefaultScreenBrightnessSetting();  
          //获取屏幕的亮度值,最大亮度,最小亮度,默认亮度  
          SensorManager sensorManager = new SystemSensorManager
                          (mContext, mHandler.getLooper());  
          //获取传感器管理服务  
          mBatteryStats = BatteryStatsService.getService();  
          //初始化电量统计服务  
          mNotifier = new Notifier(
              Looper.getMainLooper(), 
              mBatteryStats,mAppOps, 
              createSuspendBlockerLocked("PowerManagerService.Broadcasts"),  
              mPolicy);  

          mWirelessChargerDetector = new WirelessChargerDetector(sensorManager,  
          createSuspendBlockerLocked
                      ("PowerManagerService.WirelessChargerDetector"),mHandler);  
          mSettingsObserver = new SettingsObserver(mHandler);  
          //settings的监听器  
          mLightsManager = getLocalService(LightsManager.class);  
          //LED指示灯管理服务  
          mAttentionLight = 
              mLightsManager.getLight(LightsManager.LIGHT_ID_ATTENTION);  

          // 初始化屏幕显示服务  
          mDisplayManagerInternal.initPowerManagement(  
                  mDisplayPowerCallbacks, mHandler, sensorManager);  
          //第二步:注册相关的BroadCastReceiver  
          IntentFilter filter = new IntentFilter();  
          filter.addAction(Intent.ACTION_BATTERY_CHANGED);  
          filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);  
          mContext.registerReceiver(new BatteryReceiver(), filter, null, mHandler);  
          //注册电池变化的接收器  
          filter = new IntentFilter();  
          filter.addAction(Intent.ACTION_DREAMING_STARTED);  
          filter.addAction(Intent.ACTION_DREAMING_STOPPED);  
          mContext.registerReceiver(new DreamReceiver(), filter, null, mHandler);  
          //注册屏保开始和结束的接收器  
          filter = new IntentFilter();  
          filter.addAction(Intent.ACTION_USER_SWITCHED);  
          mContext.registerReceiver
                  (new UserSwitchedReceiver(), filter, null, mHandler);  
          //注册切换用户的接收器  
          filter = new IntentFilter();  
          filter.addAction(Intent.ACTION_DOCK_EVENT);  
          mContext.registerReceiver(new DockReceiver(), filter, null, mHandler);  
            
          //第三步.注册设置变化的监听器  
          final ContentResolver resolver = mContext.getContentResolver();  
          resolver.registerContentObserver(Settings.Secure.getUriFor(  
                  Settings.Secure.SCREENSAVER_ENABLED),  
                  false, mSettingsObserver, UserHandle.USER_ALL);  
            
          ……  
          resolver.registerContentObserver(Settings.Secure.getUriFor(  
                  Settings.Secure.DOUBLE_TAP_TO_WAKE),  
                  false, mSettingsObserver, UserHandle.USER_ALL);  
          //双击唤醒屏幕  
          // 第四步: 从文件读取默认的配置信息  
          readConfigurationLocked();  
          //读取设置信息,并更新相关的变量  
          updateSettingsLocked();  
          // 第五步  
          mDirty |= DIRTY_BATTERY_STATE;  
          

剩余60%内容,订阅专栏后可继续查看/也可单篇购买

Android系统面试题全解析 文章被收录于专栏

2020年研究生毕业后,工作重心由嵌入式Linux转为安卓系统,Android发展已经很多年,网上面向中初级Android系统开发的面经还比较少,也不够集中,因此梳理出本专栏,本专栏收集了本人工作中持续积累的众多安卓系统知识,持续更新中。

全部评论

相关推荐

头像
不愿透露姓名的神秘牛友
05-08 00:11
已编辑
唯品会 运营 14.5*12 硕士985
点赞 评论 收藏
转发
1 收藏 评论
分享
牛客网
牛客企业服务