修复Bug:
现象:节能控制当非按电源键锁屏的情况下,开启的节能不亮屏控制不成功.
分析差异:
- 按电源键锁屏:
- event.log: power_screen_state[0,2,0,0]
- 自动超时锁屏:
- event.log: power_screen_state[0,3,0,0]
- 上述情况是event.log的打印,具体解析还得看源码或者大神指教.
猜测:
- 其他地方调用获取并释放常亮屏锁.
- 休眠锁未维护好,未奏效.
排除过程
- 观察打印流程中WakeLock实例的创建与释放.
- 观察WakeLock初始化的参数:
- PowerManager.SCREEN_DIM_WAKE_LOCK
- PowerManager.SCREEN_BRIGHT_WAKE_LOCK
- PowerManager.PARTIAL_WAKE_LOCK
- 上述参数配合一下两个参数使用:
- PowerManager.ACQUIRE_CASES_WAKEUP
- PowerManager.ON_AFTER_RELEASE
中间的弯路:
- 特大耗时点:研究Android … 情况下亮屏.对比power_screen_state[0,2,0,0]与power_screen_state[0,3,0,0]的区别还未果…
- 当时的想法:找出这两种状态下的差异,通过差异在项目中寻找解答逻辑.
- 失败原因:对Android偏底层实现不了解.
正确解决Bug:
- 全局搜索所有的WakeLock类的对象,将所有执行WakeLock初始化的代码中加断点,重现Bug,分析.
- 发现在另外一个类中获取并释放了一次常亮锁导致此Bug