美文网首页
Android如何保持后台运行——唤醒锁机制

Android如何保持后台运行——唤醒锁机制

作者: 头秃到底 | 来源:发表于2024-02-27 19:51 被阅读0次

    前言

    如今在Android上想要保证存活越来越难了,但是Android提供有一个机制——唤醒锁,可以保证cpu一直不休眠,但是代价就是耗电高。这个机制主要是用于一些特别的场景,比如音乐类APP在后台播放音乐,这就需要使用唤醒锁来保证持续播放下去。所以普通APP尽量避免使用这个,当然如果我们自己开发自己使用的小工具或者企业内部使用APP还是可以用的。

    下面来看看如何使用这个唤醒锁。

    使用唤醒锁

    首先需要在AndroidManifest.xml中添加权限

    android.permission.WAKE_LOCK
    
    

    然后使用PowerManagerService来创建一个唤醒锁,并启用,代码如下:

    val powerManager = getSystemService(Context.POWER_SERVICE) as PowerManager 
    wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "$packageName:wake") 
    wakeLock?.acquire()
    
    

    这样就是激活唤醒锁,cpu就会保持唤醒状态,为了避免不必要的耗电,要在不需要的时候释放唤醒锁

    wakeLock?.release()
    
    

    WakeLock的acquire方法还支持传入超时时间,这样当超时的时候就会自动释放唤醒锁,防止出现一直无法释放导致耗电的情况

    wakeLock?.acquire(10 * 60 * 1000L)
    
    

    这样在十分钟后就会自动释放唤醒锁

    level和flag

    上面我们使用PowerManagerService的newWakeLock函数来创建唤醒锁,这个函数有两个参数,第二个参数是tag,就是标识这个唤醒锁,是一个自定义的字符串;第一个参数是levelAndFlags,这个很重要,重点说一下

    level

    其中level有四种:

    • PARTIAL_WAKE_LOCK:可以允许屏幕和键盘背景光关闭,CPU一直不休眠

    • FULL_WAKE_LOCK:当屏幕和键盘背景光都常亮的时候CPU不休眠,如果关闭背景光则释放该锁

    • SCREEN_DIM_WAKE_LOCK:当屏幕亮起(及屏幕变暗)时CPU不休眠,可以允许键盘背景光关闭。如果关闭屏幕则释放该锁

    • SCREEN_BRIGHT_WAKE_LOCK:当屏幕亮起(不包括屏幕变暗)时CPU不休眠,可以允许键盘背景光关闭。如果关闭屏幕或屏幕变暗则释放该锁

    这四个level只能存在一个,是互斥的。

    这里涉及到Android设备的休眠过程,如果长时间不使用,则先屏幕变暗,过段时间屏幕关闭,再过段时间CPU关闭。

    所以上面提到屏幕亮起的时候,会特意提到是否包含屏幕变暗,比如SCREEN_BRIGHT_WAKE_LOCK在屏幕变暗的时候就会释放唤醒锁。

    flag

    flag有两个:

    • ACQUIRE_CAUSES_WAKEUP:当激活CPU唤醒锁的时候保持屏幕常亮,不能与PARTIAL_WAKE_LOCK同时使用

    • ON_AFTER_RELEASE:当释放CPU唤醒锁后,屏幕会保持亮一会,而不是立刻锁屏,同样不能与PARTIAL_WAKE_LOCK同时使用

    这里flag不互斥,可以同时设置

    所以levelAndFlags这个参数可以是单独的level,比如“PowerManager.PARTIAL_WAKE_LOCK”;

    也可以是“level | flag”这种形式,比如“PARTIAL_WAKE_LOCK |ON_AFTER_RELEASE”;

    也可以是“level | flag1 | flag2”这种形式,比如“PARTIAL_WAKE_LOCK | ON_AFTER_RELEASE | ON_AFTER_RELEASE”

    总结

    最后还是要提醒大家,使用唤醒锁一定注意要释放,否则会导致手机待机时间变短。另外不要滥用这个机制,尤其现在Android系统会提示用户高耗电应用,会给自己的用户带来很不好的使用体验。

    相关文章

      网友评论

          本文标题:Android如何保持后台运行——唤醒锁机制

          本文链接:https://www.haomeiwen.com/subject/qjcxzdtx.html