wakelock + handler 会让设备保持唤醒状态吗?
Will wakelock + handler allow the device to stay awake?
我目前正在开发一个应用程序,该应用程序使用 Handler 和 WakeLock 每 30 分钟启动一次 activity。但我想知道这种方法的可靠性。我确实检查了 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。
我发现这会耗尽大量电池电量。有没有更环保的解决方案?
是的,会的。
如果你想使用 wakefulBroadcast,你必须通过 startWakefulService() 使用 Service 并且在完成你的工作后你必须释放唤醒锁。
https://developer.android.com/training/scheduling/wakelock.html
但最有效的方法是使用 JobScheduler 和 JobServices 来启动你的 activity.
由于 Doze 模式,从 Android 6.0 (API 23) 开始,此方法将无法可靠运行。当设备空闲并处于 Doze 模式时,唤醒锁将被忽略。从 API 26 开始,这会变得更加严格,不允许后台服务自由 运行。
通常来说,经常醒来是个坏主意,除非用户正在积极使用您的应用程序并且知道该操作(因此有新的背景限制。)考虑使用 JobScheduler
来处理日常事务后台任务(尽管在打瞌睡模式下也会有限制。)
我目前正在开发一个应用程序,该应用程序使用 Handler 和 WakeLock 每 30 分钟启动一次 activity。但我想知道这种方法的可靠性。我确实检查了 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。
我发现这会耗尽大量电池电量。有没有更环保的解决方案?
是的,会的。 如果你想使用 wakefulBroadcast,你必须通过 startWakefulService() 使用 Service 并且在完成你的工作后你必须释放唤醒锁。 https://developer.android.com/training/scheduling/wakelock.html 但最有效的方法是使用 JobScheduler 和 JobServices 来启动你的 activity.
由于 Doze 模式,从 Android 6.0 (API 23) 开始,此方法将无法可靠运行。当设备空闲并处于 Doze 模式时,唤醒锁将被忽略。从 API 26 开始,这会变得更加严格,不允许后台服务自由 运行。
通常来说,经常醒来是个坏主意,除非用户正在积极使用您的应用程序并且知道该操作(因此有新的背景限制。)考虑使用 JobScheduler
来处理日常事务后台任务(尽管在打瞌睡模式下也会有限制。)