wakelock + handler会让设备保持清醒吗?

问题描述 投票:0回答:2

我目前正在开发一个应用程序,它使用Handler和WakeLock每30分钟启动一次活动。但我想知道这种方法的可靠性。我确实检查了this post,但它似乎没有回答我的问题。这是我用来保持我的服务运行和运行的代码:

    @Override
public int onStartCommand(Intent intent, int flags, int startId) {
    PowerManager powerManager = (PowerManager) getSystemService(POWER_SERVICE);
    wakeLock = powerManager.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK | PowerManager.ACQUIRE_CAUSES_WAKEUP, "MyWakelockTag");
    wakeLock.acquire();
    final Runnable runnable = new Runnable() {
        @Override
        public void run() {
            Intent sendMessage = new Intent();
            sendMessage.setAction(LAWAY);
            sendMessage.setClass(LAWAYService.this, LReceiver.class);
            sendBroadcast(sendMessage);
        }
    };
    handler.postDelayed(runnable, DURATION);
    return START_STICKY;
}

这有多可靠?我和WakefulBroadcastReceiver一起使用它。到目前为止,它正在使用我测试过的三款设备,包括三星Galaxy Note 5,Google Pixel XL和Nexus 6P。

我发现这耗尽了大量的电池。有更环保的解决方案吗?

android android-intent android-service wakelock powermanager
2个回答
0
投票

由于Doze模式,从Android 6.0(API 23)开始,此方法无法正常工作。当设备处于空闲状态且处于Doze状态时,将忽略唤醒锁定。从API 26开始,这将获得更多限制,并且不允许后台服务自由运行。

除非用户正在积极使用您的应用程序并且知道操作(因此新的背景限制),否则经常醒来通常是个坏主意。查看使用JobScheduler来处理日常后台任务(尽管也有限制)在打盹模式。)


0
投票

是的,它会的。如果你想使用wakefulBroadcast,你必须通过startWakefulService()使用Service,并在完成你的工作后你必须释放唤醒锁。 https://developer.android.com/training/scheduling/wakelock.html但最有效的方法是使用JobScheduler和JobServices来开始您的活动。

© www.soinside.com 2019 - 2024. All rights reserved.