Android 代码设置休眠

2022年7月27日 26点热度 0人点赞

跟Android休眠策略关系最紧密的class有两个,一个是PowerManager,另一个是PowerManager.WakeLock。通过这两个class,可以实现设备的电源管理,下文详细介绍如何在代码中实现电源管理。

工具/原料

  • Android Studio

方法/步骤

  1. 1

    App代码中不做任何处理,当按下电源键,屏幕关闭,设备就会开始休眠,App任务就会终止,直到系统唤醒过来。如果希望按下电源键之后App还能在后台运行,就需要做以下处理。

  2. 2

    在AndroidManifest.xml中申请wakelock权限。

    <uses-permission android:name="android.permission.WAKE_LOCK"/>

  3. 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. 4

    重新编译安装App,当App运行起来执行上述TODO任务时,即使屏幕熄灭,任务也能正常执行,直到wl.release()执行了之后,设备系统就会开始休眠流程。

  5. 5

    WakeLock有很多种。如PARTIAL_WAKE_LOCK用于保持CPU运行,屏幕可以关闭,常见的如播放音乐时会使用到。ACQUIRE_CAUSES_WAKEUP常用于通知,可以让屏幕从灭屏状态忽然亮一下。详细地请参考Android开发官网,根据需要选用。

  6. 6

    wl.acquire()和wl.release()必须是成对使用,通常在onRusume方法中将设置的wakelock使用acquire()方法来保持唤醒,在onPause方法中使用release()方法来释放掉该wakelock,根据Activity生命周期来巧妙地使这两个方法成对的出现。

     

  7. 7

    PowerManager和PowerManager.WakeLock还有很多方法,常用的有isHeld()方法用于判断wakelock是否以及释放,isInteractive()用于判断设备是否处于Iinteractive状态,isPowerSaveMode()等用于判断设备当前的是否处于节能状态。更多的请仔细阅读Andorid开发API,按需设计应用的休眠策略。

    END

注意事项

  • wakelock使用完,必须释放掉。如果不释放,就会造成App即使推出了,系统仍无法进入休眠。
  • 谢谢您的阅读,如果你觉得本文有用,请点赞哦。
经验内容仅供参考,如果您需解决具体问题(尤其法律、医学等领域),建议您详细咨询相关领域专业人士。
作者声明:本篇经验系本人依照真实经历原创,未经许可,谢绝转载。
展开阅读全部

laozhao

这个人很懒,什么都没留下

文章评论