Android 了解前台服务生命周期

Android 了解前台服务生命周期,android,service,Android,Service,我正在尝试实现一个前台服务,并试图了解它是如何处理崩溃的 我创建了一个简单的服务,如下所示: @Override public int onStartCommand(Intent intent, int flags, int startId) { checkRunningAndStartForeground(); return super.onStartCommand(intent, flags, startId); } @Override public void onCrea

我正在尝试实现一个前台服务,并试图了解它是如何处理崩溃的

我创建了一个简单的服务,如下所示:

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
    checkRunningAndStartForeground();
    return super.onStartCommand(intent, flags, startId);
}

@Override
public void onCreate() {
    super.onCreate();
    crashAfterTenSeconds();
}

@Override
public void onDestroy {
    super.onDestroy();
    if(isRunning) {
        isRunning = false;
        stopForeground(true);
    }
}
发生的情况是,服务在前台启动,然后如预期的那样崩溃。这是系统计划重新启动的时间。正如预期的那样,它会重新启动,然后再次崩溃。之后,不会计划重新启动

我的问题是,为什么它只重新启动一次,而不是两次?我希望它在每次崩溃后都能继续重新启动

我担心的是,如果我的应用程序正在运行,并且以某种方式崩溃了两次,那么它将永远不会重新启动


例如,它一开始会崩溃一次,运行一两天,然后再次崩溃,这是否意味着它不会回来?

正如David在评论中建议的那样,我尝试增加崩溃间隔,但没有帮助。我相信android存储了服务崩溃的次数,如果它崩溃2次,不管间隔多长,它都会停止重启。我相信这与android关闭内存服务时有所不同,我还没有让android为前台服务这么做。

尝试在return语句中使用StartSticky,它会起作用。
Android系统将在崩溃后重新启动服务。

警告:我还没有阅读Android的源代码,所以我只是在这里猜测-Android会在崩溃后自动重新启动您的服务。如果你的服务总是在启动时崩溃,那么Android就不想继续重新启动它。为了防止“启动-崩溃-启动-崩溃…”的无限循环,Android可能会记住您的服务崩溃,并且不会重新启动它。我可以想象,您的服务每10秒崩溃一次会触发这种行为。尝试每10分钟崩溃一次,看看效果是否不同。