首先看一下Android Powermanager Class Overview,对Android的几种不同的休眠模式有个大致了解。

如果不进行特别的设置,Android会在一定时间后屏幕变暗,在屏幕变暗后一定时间内,约几分钟,CPU也会休眠,大多数的程序都会停止运行,从而节省电量。但你可以在代码中通过对Powmanager API的调用来设置不同的休眠模式。

Flag Value CPU Screen Keyboard
PARTIAL_WAKE_LOCK On* Off Off
SCREEN_DIM_WAKE_LOCK On Dim Off
SCREEN_BRIGHT_WAKE_LOCK On Bright Off
FULL_WAKE_LOCK On Bright Bright

如上表,最高等级的休眠是屏幕,键盘等,cpu都全部休眠。可以设置不同的模式,让其产生不同的休眠,比如让cpu保持运行。
设置代码如下:

[java] view plain copy
  1. PowerManagerpm=(PowerManager)getSystemService(Context.POWER_SERVICE);
  2. PowerManager.WakeLockwl=pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK,"MyTag");
  3. wl.acquire();
  4. ..screenwillstayonduringthissection..
  5. wl.release();


我曾经遇到的几个坑点及解决:

1.向服务器轮询的代码不执行。

曾经做一个应用,利用Timer和TimerTask,来设置对服务器进行定时的轮询,但是发现机器在某段时间后,轮询就不再进行了。查了很久才发现是休眠造成的。后来解决的办法是,利用系统的AlarmService来执行轮询。因为虽然系统让机器休眠,节省电量,但并不是完全的关机,系统有一部分优先级很高的程序还是在执行的,比如闹钟,利用AlarmService可以定时启动自己的程序,让cpu启动,执行完毕再休眠。

2.后台长连接断开。

最近遇到的问题。利用Socket长连接实现QQ类似的聊天功能,发现在屏幕熄灭一段时间后,Socket就被断开。屏幕开启的时候需进行重连,但每次看Log的时候又发现网络是链接的,后来才发现是cpu休眠导致链接被断开,当你插上数据线看log的时候,网络cpu恢复,一看网络确实是链接的,坑。最后使用了PARTIAL_WAKE_LOCK,保持CPU不休眠。

3.调试时是不会休眠的。
让我非常郁闷的是,在调试2的时候,就发现,有时Socket会断开,有时不会断开,后来才搞明白,因为我有时是插着数据线进行调试,有时拔掉数据线,这时Android的休眠状态是不一样的。而且不同的机器也有不同的表现,比如有的机器,插着数据线就会充电,有的不会,有的机器的设置的充电时屏幕不变暗等等,把自己都搞晕了。其实搞明白这个休眠机制,一切都好说了。

转自http://www.whoslab.me/blog/?p=474

更多相关文章

  1. 【android】图片放错文件夹引起显示大小不同的原因与屏幕适配原
  2. android 开发 屏幕适配 概念
  3. android 自适应 多屏幕支持
  4. Android应用屏幕适应问题的解决
  5. Android中dp,px,sp概念梳理以及如何做到屏幕适配
  6. 工具篇 之 Android(安卓)WIFI ADB 实战
  7. android 使用asm.jar将android手机屏幕投影到电脑上
  8. 安卓view设置为满屏幕
  9. ‍Android(安卓)尺寸和分辨率

随机推荐

  1. XML模式-详细介绍DocBook XML
  2. xml解析java基础的详细介绍
  3. 使用XML将机器内码转换为人们能够理解的
  4. XML模式-RDF的详细介绍
  5. XML模式-vCard结构详解
  6. 具体介绍历数Firefox2.0对XML处理的改进
  7. 详细介绍(javascript+asp)XML、XSL转换输
  8. XML模式-WSD的描述
  9. 简单介绍XML模式相关常用的缩写词
  10. 在XML模式中扩展枚举列表的示例代码详解