0

複数のアクティビティで構成されるアプリケーションがあります。アプリケーションが起動すると、以下を使用していくつかのアラームがスケジュールされAlarmManager、いくつかのサービスが開始されます。

AlarmManager am = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
a.setInexactRepeating(...)
....

ユーザーがアプリケーションを終了したときに、すべてのサービスが停止し、すべてのアラームがスケジュールされていないことを保証する方法を知りたいです。

onDestroy問題は、ユーザーがさまざまなアクティビティからアプリケーションを離れることができることです。すべてのアクティビティでメソッドをオーバーライドするという考えは好きではありません。Intentアプリケーションが終了したときに受け取ることができる既知のものはありますか?

Applicationまた、Android アプリケーションには、onTerminateメソッドを使用して から拡張されたクラスを含めることができることもわかりました。

public class MyApplication extends Application { 
    @Override
    public void onTerminate() {
        ...
    }
}

しかし、ドキュメントは非常に明確です。「このメソッドが呼び出されることに依存しないでください。多くの場合、不要なアプリケーション プロセスは、アプリケーション コードを実行せずにカーネルによって単純に強制終了されます」

どんな提案でも大歓迎です。

4

1 に答える 1

2

ユーザーがアプリケーションを終了したときに、すべてのサービスが停止し、すべてのアラームがスケジュールされていないことを保証する方法を知りたいです。

Androidには「ユーザーがアプリケーションを終了する」などというものはありません。

アプリケーションの終了時に受け取ることができる既知のインテントはありますか?

いいえ。

また、Androidアプリケーションには、onTerminateメソッドを使用してApplicationから拡張するクラスを含めることができることもわかりました。

これは、多くの場合、実行中のコンポーネントがなくなった後に呼び出されます。あなたの場合、実行中のコンポーネント(サービス)があります。

しかし、ドキュメントは非常に明確です。「呼び出されるこのメソッドに依存することはありません。多くの場合、不要なアプリケーションプロセスは、アプリケーションコードを実行せずにカーネルによって強制終了されます」

いつ呼び出されないかを知っている唯一のケースは、プロセスが終了するかどうかです。この場合、スケジュールされたアラームは削除されませんが、サービスも削除されます。

于 2010-08-03T21:52:54.223 に答える