Android 设备能否在前台服务之前休眠?
我知道之前我们需要使用WakefulBroadcastReceiver来确保在receiverAndroid 设备能否在前台服务之前休眠?,android,android-service,wakelock,Android,Android Service,Wakelock,我知道之前我们需要使用WakefulBroadcastReceiver来确保在receiveronReceive和serviceonHandleIntent之间设备不会再次进入睡眠状态 现在谷歌似乎不赞成使用WakefulBroadcastReceiver,因为从一个接收者开始一项服务是不“正确”的 我正在做的一件事是从高优先级FCM通知启动前台服务。这在新的后台执行规则下完全有效。但由于WakefulBroadcastReceiver已被弃用,这是否意味着startForegroundServ
onReceive
和serviceonHandleIntent
之间设备不会再次进入睡眠状态
现在谷歌似乎不赞成使用WakefulBroadcastReceiver,因为从一个接收者开始一项服务是不“正确”的
我正在做的一件事是从高优先级FCM通知启动前台服务。这在新的后台执行规则下完全有效。但由于WakefulBroadcastReceiver
已被弃用,这是否意味着startForegroundService
保证设备在onReceive
和OnHandleContent
的唤醒锁定之间保持足够长的唤醒时间?或者我应该在接收器中手动持有wakelock并将其发送到服务以释放它吗
这是否意味着startForegroundService可以保证设备不会损坏
在onReceive和onHandleIntent的wakelock之间保持足够长的清醒时间
没有
或者我应该在接收器中手动持有wakelock并发送它吗
要发布的服务
您可以在服务的onCreate()
中请求部分wakelock,如下所示:
private PowerManager.WakeLock wakeLock;
@Override
public void onCreate() {
super.onCreate();
final PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, PARTIAL_WAKE_LOCK_TAG);
...
}
@Override
public void onDestroy() {
super.onDestroy();
if (wakeLock.isHeld()) {
wakeLock.release();
}
}
请记住在使用后或在onDestroy()中释放wakelock,如下所示:
private PowerManager.WakeLock wakeLock;
@Override
public void onCreate() {
super.onCreate();
final PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
wakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, PARTIAL_WAKE_LOCK_TAG);
...
}
@Override
public void onDestroy() {
super.onDestroy();
if (wakeLock.isHeld()) {
wakeLock.release();
}
}
谷歌建议避免使用wakelock,因为它会耗尽用户的电池电量。有几种API可用于各种用例。基于此,您可以考虑以下备选方案:
- 如果应用程序正在执行长期运行的HTTP下载,请考虑使用DeWaldMeals/
- <> LI>如果应用程序正在同步外部服务器的数据,请考虑创建一个同步适配器。 如果您的应用程序需要定期执行后台任务,请考虑使用JoePayStor或Firebase JobDispatcher。供参考 在特定时间间隔触发任务时,请参见
因此,可以保证接收器的wakelock将与服务的
onCreate
方法重叠,以便设备不会进入睡眠状态?@rcell AFAIK,在接收器中请求wakelock不是强制性的。在ForegroundService内部使用它就足够了。