跟Android休眠策略关系最紧密的class有两个,一个是PowerManager,另一个是PowerManager.WakeLock。通过这两个class,可以实现设备的电源管理,下文详细介绍如何在代码中实现电源管理。
方法/步骤
-
1
App代码中不做任何处理,当按下电源键,屏幕关闭,设备就会开始休眠,App任务就会终止,直到系统唤醒过来。如果希望按下电源键之后App还能在后台运行,就需要做以下处理。
-
2
在AndroidManifest.xml中申请wakelock权限。
<uses-permission android:name="android.permission.WAKE_LOCK"/>
-
3
在class中输入以下代码:
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, LOG_TAG);
wl.acquire();
// TODO: 执行一些任务,例如播放音乐 2017/11/1
wl.release();
-
4
重新编译安装App,当App运行起来执行上述TODO任务时,即使屏幕熄灭,任务也能正常执行,直到wl.release()执行了之后,设备系统就会开始休眠流程。
-
5
WakeLock有很多种。如PARTIAL_WAKE_LOCK用于保持CPU运行,屏幕可以关闭,常见的如播放音乐时会使用到。ACQUIRE_CAUSES_WAKEUP常用于通知,可以让屏幕从灭屏状态忽然亮一下。详细地请参考Android开发官网,根据需要选用。
-
6
wl.acquire()和wl.release()必须是成对使用,通常在onRusume方法中将设置的wakelock使用acquire()方法来保持唤醒,在onPause方法中使用release()方法来释放掉该wakelock,根据Activity生命周期来巧妙地使这两个方法成对的出现。
-
7
PowerManager和PowerManager.WakeLock还有很多方法,常用的有isHeld()方法用于判断wakelock是否以及释放,isInteractive()用于判断设备是否处于Iinteractive状态,isPowerSaveMode()等用于判断设备当前的是否处于节能状态。更多的请仔细阅读Andorid开发API,按需设计应用的休眠策略。
END
文章评论