gpt4 book ai didi

java - 后台服务被暂停/终止

转载 作者:太空宇宙 更新时间:2023-11-04 09:51:08 32 4
gpt4 key购买 nike

我正在实现一个应用程序,当用户摇动手机时,该应用程序会监听并采取行动。

所以我实现了以下服务:

public class ShakeMonitorService extends Service {

...
ShakeDetector shakeDetector;

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
shakeDetector= new ShakeDetector(this);
shakeDetector.start();
....
startForeground(MY_ID, myNotification);
return Service.START_STICKY;
}

...
}

并在MainActivity的onCreate中启动服务

ContextCompat.startForegroundService(this, 
new Intent(this, ShakeMonitorService.class));

在 shakeDetector 中,我按照描述监听加速度计的传感器事件 here .

它在我的设备上正常工作,但一些用户报告说,直到他们长时间锁定设备(即 3 小时)后,它才能正常工作。从此时起,即使在使用设备(屏幕打开)时,应用程序也会停止检测摇动手势,直到再次启动应用程序。

这是怎么回事?我认为 Android 会杀死或暂停应用程序并停止服务,直到它再次打开。

如何避免这种情况?

重要说明:我不想避免系统进入休眠模式,但我想在系统退出 sleep 模式时恢复执行。

最佳答案

我了解到您已经将服务作为前台启动并发出通知,这将为您的服务提供最高优先级。您可以通过检查通知轻松检查服务是否仍在运行,因为服务一运行就会显示通知。但如果通知仍然显示,但您注意到服务执行评级低于您的预期(暂停,然后将像循环一样再次运行)。然后我认为这种行为是由Android作为操作系统引起的,它需要尽可能节省电池,因此当设备插入充电器或设备解锁并打开或设备被锁定时,服务的执行会有所不同。

但是,如果通知被忽略,则意味着该服务被代码中的一些错误杀死,这些错误导致服务代码中出现异常或内存泄漏,并且如果您已将服务标志设置为 START_STICKY 或 START_REDELIVER_INTENT,系统会在一段时间后再次启动该服务

关于java - 后台服务被暂停/终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54736764/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com