关于调试android不能睡眠问题的小技巧
2012-01-07 11:11
274 查看
【问题】
android设备有时插上充电器或别的操作后,会使设备无法进入suspend状态,可以使用下面的方法先观察一下;
【初步分析】
不能睡眠的原因可能是有代码执行了wake_lock而没有进行wake_unlock;
对于不是使用超时方式实现的wake_lock,必须要在suspend之前进行wake_unlock, 否则系统无法suspend;
由于这种原因导致的不能睡眠,可以在下面的代码加log,打印出来加lock时起的名字,能打印出java层lock时的name,这样就容易定位了;
【技巧】
在 kernel/power/wacklock.c的has_wake_lock_locked中加上name的打印,在return -1之前加上下面语句,
printk(KERN_CRIT "%s@%d lockname=%s, lockflag=0x%x", __func__, __LINE__, lock->name, lock->flags);
如图:
注意如果是在调用函数的has_wake_lock_locked的wake_unlock里加入打印name的名字,得到的有可能不是真正加锁时的名字,可能是main等名字,原因还不太清楚;
补充:
1. log中的名字是在java中用这个函数加锁的,
Power.acquireWakeLock(Power.PARTIAL_WAKE_LOCK,"YourLockLocationName");
2. 这样打印出的lock比较多,会比较慢,可以屏蔽掉自己熟悉的,比如 ipu 、PowerManagerService等等
android设备有时插上充电器或别的操作后,会使设备无法进入suspend状态,可以使用下面的方法先观察一下;
【初步分析】
不能睡眠的原因可能是有代码执行了wake_lock而没有进行wake_unlock;
对于不是使用超时方式实现的wake_lock,必须要在suspend之前进行wake_unlock, 否则系统无法suspend;
由于这种原因导致的不能睡眠,可以在下面的代码加log,打印出来加lock时起的名字,能打印出java层lock时的name,这样就容易定位了;
【技巧】
在 kernel/power/wacklock.c的has_wake_lock_locked中加上name的打印,在return -1之前加上下面语句,
printk(KERN_CRIT "%s@%d lockname=%s, lockflag=0x%x", __func__, __LINE__, lock->name, lock->flags);
如图:
注意如果是在调用函数的has_wake_lock_locked的wake_unlock里加入打印name的名字,得到的有可能不是真正加锁时的名字,可能是main等名字,原因还不太清楚;
补充:
1. log中的名字是在java中用这个函数加锁的,
Power.acquireWakeLock(Power.PARTIAL_WAKE_LOCK,"YourLockLocationName");
2. 这样打印出的lock比较多,会比较慢,可以屏蔽掉自己熟悉的,比如 ipu 、PowerManagerService等等
相关文章推荐
- 关于android手机不能调试的问题
- 关于android 百度地图api 不能实时刷新的问题
- 关于IE8在 VS202010环境下不能调试的问题
- 关于android AVD 虚拟机调试出现的问题
- android关于AlertDialog.Builder中setMessage不能换行问题的解决方法
- android-关于Button设置圆角之后不能点击变色的问题
- Android中关于EditText不能取得值的问题解决方案
- 关于最新版的android studio 中的Butterknife 中不能使用的问题
- 解决使用微软模拟器VS Emulator for Android在VS2017 Xamarin开发中不能调试程序的问题。
- 关于android 调试时运行adb shell 提示offline 的问题解决
- 关于不能调试C#代码的问题
- 关于用奇酷360手机调试apk时不能在logcat输出的问题
- Domain=NSOSStatusErrorDomain Code=1937337955 关于iOS录音AVAudioRecorder与音频播放AVAudioPlayer真机调试录音不能播放的问题
- 关于android SDK adb命令不能用问题
- 关于Android应用调试在小米手机安装程序时出现Installation failed with message INSTALL_CANCELED_BY_USER问题解决
- Android之关于Fragment不能导入的问题
- 关于Android不能启动的问题
- 关于 在vs2008下 调试页面不能显示的问题
- 关于VS2005和VS2008调试时,有些代码不能单步调试问题
- Android 关于7.0权限相册不能选择 或者联系人不能选择的问题