Android怎样防止休眠系统休眠

android中有些应用提示“阻止系统休眠”,请问是如何做到的? - 知乎有问题,上知乎。知乎作为中文互联网最大的知识分享平台,以「知识连接一切」为愿景,致力于构建一个人人都可以便捷接入的知识分享网络,让人们便捷地与世界分享知识、经验和见解,发现更大的世界。2被浏览568分享邀请回答01 条评论分享收藏感谢收起0添加评论分享收藏感谢收起写回答05-1502-1602-1602-1602-1602-1602-1602-1602-1602-16最新范文01-0101-0101-0101-0101-0101-0101-0101-0101-0101-0101-0101-0101-0101-0101-01android系统电源管理--如何防止系统进入深度睡眠
1.问题描述:
最近做项目遇到一个很奇怪的问题,就是安卓系统待机一会就进入了深度睡眠,连终端都没响应。调试信息如下:
] request_suspend_state: sleep (0-&3) at
( 01:28:31. UTC)
175.738202] s3cfb_early_suspend is called
175.741885] (s3cfb_backlight_off, 546): LCD_PWM_OFF
175.756345] (s3cfb_backlight_off, 588): VGA_EN_OFF
175.764283] (s3cfb_backlight_off, 603): BK_VDD_OFF
176.004117] &&-GTP-INFO-&& Esd suspended!
176.038412] PM: Syncing filesystems ... done.
176.065360] Freezing user space processes ... (elapsed 0.01 seconds) done.
176.086237] Freezing remaining freezable tasks ... (elapsed 0.01 seconds) done.
176.106202] Suspending console(s) (use no_console_suspend to debug)
从调试信息看来,android系统把用户空间的任务都停止掉了,难怪wifi和触摸屏都没响应,只有点击电源键安卓系统才能唤醒。跟踪代码,发现最后一步系统电源管理进入了enter_state,从而执行了深度休眠的操作。
源文件://suspend.c
int enter_state(suspend_state_t state)
if (!valid_state(state))
return -ENODEV;
if (!mutex_trylock(&pm_mutex))
return -EBUSY;
printk(KERN_INFO "PM: Syncing filesystems ... ");
sys_sync();
printk("done.\n");
pr_debug("PM: Preparing system for %s sleep\n", pm_states[state]);
error = suspend_prepare();
if (error)
if (suspend_test(TEST_FREEZER))
pr_debug("PM: Entering %s sleep\n", pm_states[state]);
error = suspend_devices_and_enter(state);
pr_debug("PM: Finishing wakeup.\n");
suspend_finish();
mutex_unlock(&pm_mutex);
}2.问题分析
android系统有earlysuspend和suspend两种休眠,earlysuspend是浅度睡眠,suspend是深度休眠。这个是由linux电源管理控制的,电源管理的接口是“/sys/power/state”和"/sys/power/wake_lock","/sys/power/wake_unlock",这个是linux是否休眠和是否进入深度休眠的关键点。只有wake_lock上锁了,linux系统就不会进入深度休眠。
3.问题解决
从上分析可知,只要linux保持有一个唤醒锁,系统就不会进入深度休眠。那么解决问题的思路是在linux启动的时候添加一个唤醒锁就行了。在init.rc文件里面添加一个初始化项:
echo "PowerManagerService.noSuspend" & /sys/power/wake_lock问题至此完美解决。参考资料:
1.Android 内核驱动——电源管理 :http://blog.sina.com.cn/s/blog_67dxlyh.html
2.:http://www.cnblogs.com/yajing-zh/p/4891780.html
没有更多推荐了,
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。
问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
如题目所述,我们应该如何实现一个在一个安卓机上的秒表
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
到安卓bus论坛中,里面有很多你需要的源代码资源
同步到新浪微博
分享到微博?
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:
在 SegmentFault,学习技能、解决问题
每个月,我们帮助 1000 万的开发者解决各种各样的技术问题。并助力他们在技术能力、职业生涯、影响力上获得提升。

我要回帖

更多关于 防止电脑休眠 的文章

 

随机推荐