2

我的应用程序有一个前台服务,它必须一直运行并且永不停止。虽然我对其进行了几次测试,但似乎在 3-4 天后,Android 决定停止它,并且不再重新启动它,并且在我的 Activity 中,我检查了该服务是否正在运行,如果它没有启动它。即使服务没有启动,我也无法调试它,因为这不会立即发生。这是我的支票,有什么问题吗?

if (!isMyServiceRunning(MyService.class)) {
        startService(new Intent(this, MyService.class));
}

private boolean isMyServiceRunning(Class<?> serviceClass) {
    ActivityManager manager = (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
    for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
        if (serviceClass.getName().equals(service.service.getClassName())) {
            return true;
        }
    }
    return false;
}

我在 Activity 的 onResume() 中调用了这个检查,我不能每次在 Activity 启动时都运行它,因为我在服务中有一个不断运行的 Thread,如果启动多次,它将获得多个实例。 .

所以这就是我想要的:要么有更可靠的方法来检查服务是否正在运行,要么在每次活动启动时启动服务,以防止出现问题,并且其中的线程必须始终只有 1 个实例(我有已经声明为静态)

4

1 回答 1

1

您可以在启动/恢复时创建服务Bindable并将您的服务绑定Activity到服务。Activity这样您就可以确保服务正在运行。但我认为你的服务有问题。我要求您发布有关该服务的更多信息?操作系统杀死没有任何痕迹的前台服务是不正常的。

于 2014-12-13T09:27:22.197 回答