0
点赞
收藏
分享

微信扫一扫

【java】简单的Java语言控制台程序

勇敢乌龟 2024-02-11 阅读 15
android

一. 基础知识介绍

 1. WakeLock(休眠锁)

2. WakeLock的多种类型:

二. 遇到不灭屏的解决方法

1. 方法一

实例分析:

1. 案例一

   复现场景:

(1) 查看dump power的信息:

(2) 发现有持有'TinnoFactory'  TAG的 wake lock (FULL_WAKE_LOCK)导致不能灭屏。

(3) 查看代码:

(4)  这个应用退出来就可以恢复。

2. 案例二

 复现场景:

(1) 查看dump power的信息: 

 (2) 发现有持有'WindowManager'  TAG,是来自uid: 10172, 通过日志发现10172是dialer应用。

 (3) 分析'WindowManager'  TAG,怎么持有wake lock。

  使用倒序的方法找:

 1) TAG 定义:  

TAG_WM 定义:

frameworks/base/services/core/java/com/android/server/wm/WindowManagerDebugConfig.java

 2)  调用newWakeLock SCREEN_BRIGHT_WAKE_LOCK的地方:

frameworks/base/services/core/java/com/android/server/wm/WindowManagerService.java

 3)谁在使用mHoldingScreenWakeLock.

只要newHoldScreen不为null,若调用setHoldScreenLocked,则就会调用acquire函数.

 4) 接下来寻找是调用setHoldScreenLocked 函数

   发现只有一处,是在RootWindowContainer.java 中。

frameworks/base/services/core/java/com/android/server/wm/RootWindowContainer.java
 

5) 查看是谁给mHoldScreen赋值。

也是只有一处,当设置flag是FLAG_KEEP_SCREEN_ON。

android/frameworks/base/services/core/java/com/android/server/wm/RootWindowContainer.java 

(4) 在dialer 中查看是谁使用了FLAG_KEEP_SCREEN_ON 。

   果真有有相应的代码,进行debug调试既可.

vendor/mediatek/proprietary/packages/apps/Dialer/java/com/android/incallui/InCallPresenter.java

举报

相关推荐

0 条评论