【问题标题】:Foreground service being stopped by Android does not restart later被Android停止的前台服务稍后不会重新启动
【发布时间】:2014-12-13 09:20:06
【问题描述】:

我的应用程序有一个前台服务,它必须始终运行并且永不停止。虽然我对其进行了几次测试,但似乎在 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()中调用了这个check,我不能每次启动时都运行它,因为我在服务中有一个不断运行的线程,如果启动几个它会得到多个实例次...

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

【问题讨论】:

    标签: android android-service thread-sleep foreground-service


    【解决方案1】:

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

    【讨论】:

    • 你需要知道什么?
    • ForegroundService.buildForeground(this, allowedCigarette) 是做什么的?
    • 它使这个 => pastebin.com/xnCqHXVF 使服务的前台通知(在任务栏中)
    • 抱歉,回答迟了。您的服务似乎一切正常...您可以尝试使用绑定的方法。这样您就可以确保服务正在运行。
    猜你喜欢
    • 2023-03-12
    • 1970-01-01
    • 1970-01-01
    • 2020-07-24
    • 1970-01-01
    • 2017-01-25
    • 1970-01-01
    • 2018-11-11
    • 1970-01-01
    相关资源
    最近更新 更多