安卓从入门到进阶第六章(dumpsys初探)

我希望文章是给出一个思路,让你能够跟着这个,找到框架,然后自行分析,总结,得到知识。

阅读代码,是需要长时间的训练,从问题出发,就跟从项目出发一样,在实战当中,倒逼自己提升,思考。

这一章分享一个小知识,关于自动亮屏的定位策略。

默认的配置值在

frameworks\base\packages\SettingsProvider\src\com\android\providers\settings

文件

DatabaseHelper.java

loadBooleanSetting(stmt, Settings.System.SCREEN_BRIGHTNESS_MODE,

R.bool.def_screen_brightness_automatic_mode);

这里配置值位置:

frameworks\base\packages\SettingsProvider\res\values

defaults.xml

配置着默认值:

<bool name="def_screen_brightness_automatic_mode">true</bool>

这样子我们就知道了,代码中检索使用这个

SCREEN_BRIGHTNESS_MODE 信息了。

我们可以在设置和下拉状态栏,只需要将设置值传入系统即可,后续的动作都在系统中处理。检索这个 SCREEN_BRIGHTNESS_MODE ,会找到整个的关联。

具体的文件为:

frameworks\base\services\core\java\com\android\server\display

AutomaticBrightnessController.java(监听光感传感器,在变化后响应)

DisplayPowerController.java(这里贴一段关键的逻辑,自动亮屏获取值,然后返回brightness,然后设置下去。)

这里直接就会走到设置屏幕亮度的。整个上层只是设置开关,整体逻辑都是驱动和服务处理。如果需要分析这里的故障:

编译版本时候,需要开启AutomaticBrightnessController.java 中的

private static final boolean DEBUG = false;

private static final boolean DEBUG_PRETEND_LIGHT_SENSOR_ABSENT = false;

改成

private static final boolean DEBUG = true;

private static final boolean DEBUG_PRETEND_LIGHT_SENSOR_ABSENT =true;

再将DisplayPowerController.java

private static final boolean DEBUG = false;

private static final boolean DEBUG_PRETEND_PROXIMITY_SENSOR_ABSENT = false;

改成

private static final boolean DEBUG = true;

private static final boolean DEBUG_PRETEND_PROXIMITY_SENSOR_ABSENT = true;

整体的代码流程为:自动亮屏开启后,AutomaticBrightnessController会收到变化回调,在回调后,触发handleLightSensorEvent。

随后会调用到DisplayPowerController里面,从AutomaticBrightnessController.config进行更新,然后获取最新的亮度值,赋值到brightness=getAutomaticScreenBrightness,然后动态更新:

如果你可以调试,那就直接在这里下断点,分析就好了。

具体调试,参考安卓从入门到进阶第四章(调试方法),如果你对这块知识感兴趣,记得实战,跟着这个框架,进行阅读,分析。

关于上一章遗留的问题,下一章进行讲解。也就是系统不断的弹出一个界面,我想知道是谁拉起来的,该怎么分析呢?

我们下一节来讲这个,具体会说一些关于binder的知识(忽略细节,直接关注核心),可以先看看这个文章(文中的zygote拼错了,不要在意)

安卓从入门到进阶第二篇(框架流程)

后台回复 精华 获取去年一年的精彩 PDF。

推荐你读:

面子要挣

四种收入结构

一个逻辑陷阱

给初入职场朋友的8条走心建议

安卓从入门到进阶第九章(自动亮屏)相关推荐

  1. 安卓从入门到进阶第六章(dumpsys初探)

    后续还是会写一写关于安卓的知识,只是写的就按照轻快,实战为主,不做过多原理的剖析了.今天就来处理一个问题, 如何快速定位当前手机屏幕上某个区域上是哪个应用绘制的? 如下为解决方案: 使用 adb sh ...

  2. Java从入门到精通 第九章 数字处理类

    Java从入门到精通 第九章 数字处理类 一.数字格式化 二.数学运算 1)Math类 2)常用数学运算方法 三.随机数 1)Math.random()方法 2)Random类 四.大数字运算 1)B ...

  3. 华为手机如何设置微信来消息自动亮屏?

    华为手机微信来消息不亮屏,漏过重要信息和电话怎么办?微信来消息没有自动亮屏,如果网络没有问题,就是设置项有问题.下面详细介绍微信来消息自动亮屏的设置方法. 一.确认手机已打开允许通知 1.确认系统已开 ...

  4. html让手机屏幕常亮,怎么设置屏幕常亮-手机皮套如何实现翻盖自动亮屏?原来这么简单...

    经常关注手机的人肯定曾经思考过这样一个问题:为什么有的手机支持皮套翻开自动亮屏.盖上之后自动灭屏?到底是怎么实现的呢?为什么我的皮套不支持呢? 其实这个功能主要是依靠手机中的一个传感器完成的:霍尔感应 ...

  5. python编程从入门到实践第九章——类

    相关文章链接: python编程从入门到实践第二章--变量和简单数据类型 python编程从入门到实践第三章--列表简介 python编程从入门到实践第四章--操作列表 python编程从入门到实践第 ...

  6. HT合泰单片机入门教程(第二章 点亮第一个LED灯)

    文章目录 系列文章目录 前言 一.新建工程 1.启动HT-IDE3000 2.建立工程 二.点亮LED灯 1.了解I/O 2.LED代码 总结 系列文章目录 第一章 HT单片机环境搭建 第二章 点亮第 ...

  7. 安卓从入门到进阶第一篇(环境搭建)

    "转发,助力一波!" 1.1 系统配置 1.1.1 开发环境 我们平时使用的电脑环境,基本都是Windows操作系统,为了开发Android去将电脑装成Linux系统,显而易见不太 ...

  8. python编程 从入门到实践 第九章 类(下)

    继承 一个类继承另一个类时,将自动获得另一个类的所有属性和方法,原有的类称为父类,而新的类称为子类 class Car:def __init__(self,make,model,year):self. ...

  9. python编程 从入门到实践 第九章 类(上)

    类中的函数称为方法 class Dog:def __init__(self,name,age):"""初始化name和age"""self. ...

最新文章

  1. C语言条件语句(就做个笔记,云储存一下)
  2. QT制作窗口切换的小程序
  3. 使用 x3dom 框架及 WebGL 在浏览器上显示 3 维模型
  4. 统计一下你写过多少代码
  5. 配置单节点伪分布式Hadoop
  6. Python 代码混淆和加密技术
  7. 基于 MySQL Binlog 的 Elasticsearch 数据同步实践
  8. linux 的读写操作(转)
  9. python管道安装包_Python 炫技操作:安装包的八种方法
  10. linux下安装erlang
  11. 设计模式_1_工厂模式与抽象工厂
  12. Win7蓝屏代码0x000000001e怎么解决
  13. 计算机设计大赛国奖作品_4. 界面设计
  14. 信息奥赛一本通的递推练习
  15. linux非对称内存,CryptoAPI与OpenSSL RSA非对称加密解密(PKCS1 PADDING)交互
  16. JAVA计算机毕业设计美发门店管理系统Mybatis+系统+数据库+调试部署
  17. springboot集成微信app支付
  18. char[]和char* 输出长度不同
  19. 初中学考英语听说计算机考试,2018中考英语听说计算机考试工作重要通知
  20. 典型分布式计算技术的分析和比较

热门文章

  1. 日常报错:关于tomcat默认端口被占用的问题
  2. 我们该如何度过自己的大学四年?
  3. Java程序:jstack
  4. 如何使用OpenAI API和Python SDK构建自己的聊天机器人
  5. 阿里云域名实名认证状态查询
  6. 抽象、封装、继承、多态--基本理解
  7. SQL Server 如何启用sa账户
  8. Linux面试题汇总-2
  9. C语言中的interrupt
  10. android 4.4.4版本模拟器,新一代神器!安卓模拟器4.4.2内核之上的穹顶之战