后台服务暂停/被杀

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

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

所以我实现了以下服务:

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会杀死或暂停应用程序并停止服务,直到它再次打开。

我怎么能避免这个?

重要提示:我不想避免系统进入睡眠模式,但我希望在系统退出睡眠模式时恢复执行。

java android android-service
1个回答
0
投票

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

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

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