4

フォアグラウンドサービスを実装しようとしていますが、クラッシュをどのように処理するかを理解しようとしています。

以下のような簡単なサービスを作成しました。

@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);
    }
}

何が起こるかというと、サービスはフォアグラウンドで開始し、その後、予想どおりにクラッシュします。システムによる再起動が予定されています。予想どおり、再起動してから再びクラッシュします。その後、再起動の予定はありません。

私の質問は、なぜ2回ではなく、1回再起動するのですか?クラッシュするたびに再起動し続けたい。

私が心配しているのは、アプリケーションが実行されていて、どういうわけか2回クラッシュした場合、アプリケーションが再起動されないことです。

たとえば、最初に1回クラッシュし、1日か2日実行されてから再びクラッシュしますが、それは戻ってこないという意味ですか?

4

2 に答える 2

0

Davidがコメントで示唆したように、私はクラッシュ間隔を長くしようとしましたが、それは役に立ちませんでした。アンドロイドはサービスがクラッシュした回数を保存していると思います。2回クラッシュすると、間隔に関係なく、再起動を停止します。これは、Androidがメモリのサービスを終了したときとは異なると思います。これは、Androidがフォアグラウンドサービスに対して実行するようになっているわけではありません。

于 2012-10-16T18:51:21.357 に答える
0

returnステートメントでStartStickyを使用してみてください。動作します。Androidシステムは、クラッシュ後にサービスを再開します。

于 2021-05-01T09:50:16.727 に答える