docsに従って、メソッドに依存しonDestroy()てデータを永続化しないでください。onPause()代わりに使用してください。
注:このメソッドがデータを保存する場所として呼び出されるとは考えないでください。
たとえば、アクティビティがコンテンツ プロバイダのデータを編集している場合、それらの編集は、 here ではなく、onPause() または onSaveInstanceState(Bundle) でコミットする必要があります。このメソッドは通常、アクティビティに関連付けられているスレッドなどのリソースを解放するために実装されます。これにより、アプリケーションの残りの部分がまだ実行されている間に、破棄されたアクティビティがそのようなリソースを残さないようにすることができます。
システムがこのメソッド (または他のメソッド) を呼び出さずにアクティビティのホスティング プロセスを単純に強制終了する状況があるため、プロセスがなくなった後も残り続けることを意図したことを行うために使用しないでください。
また、データをより高速に非同期で保存し、処理する戻り値がまったくないため、メソッドapply()の代わりにcommit()メソッドを使用することもできます。SharedPreferences.Editor
編集:わかりましたService。問題は、Activityバックグラウンドで実行し続けるため、寿命がはるかに長くなる可能性があることです。そのためonDestroy()、戻るボタンでアプリを閉じても、サービスが呼び出されるまでに非常に長い時間がかかることがあります。
あなたのアプリがどのように機能するのかわかりませんが、いくつか提案できます。
SharedPreferencesユーザーがアプリを閉じたときに作業したい場合は、そのメソッドをActivityor;に移動します。
- 内部では、 メソッドを使用して
Activity#onPause()を破壊できます。(以下の例を参照)。ServicestopService()
- あなた
Serviceが何らかの作業を行うことになっており、この作業が完了した後に を変更する必要がある場合はSharedPreferences、 を使用してみてくださいIntentService。ただし、一度IntentServiceに実行できるのは 1 つだけです。FIFO キューで実行されます。
- を使用したくない場合は、レギュラー内から
IntentService呼び出して停止して破棄することもできます。stopSelf()Service
仕上げの例Service:
@Override
protected void onPause() {
super.onPause();
stopService(new Intent(context, YourService.class));
}
詳細についてIntentServiceは、このチュートリアルを参照してください。Serviceライフサイクルの詳細については、このリンクを参照してください。