Androidアプリが終了する直前にクリーンアップを行うにはどうすればよいですか?

私のAndroidアプリが終了しているときにいくつかのクリーンアップ(私はSharedPreferencesをクリアしたい)を行うことができるonTerminate()メソッドがありますか?

私はSharedPreferenceに格納している、いくつかの数値の実行平均を維持しているActivityを持っています。私は、この特定のアクティビティのonDestroy()でそれをクリアすることはできませんので、アプリケーションが実行されている間にこの平均値を保持しておきたいと思います。私は、アプリケーションが終了しようとすると、それをクリアできるようにする必要があります。

これどうやってするの?

3
アプリケーションが終了する前に onPause()以外のイベントが発生するという保証はないことを考慮すると、アンドロイドは Runtime.addShutdownHook をサポートしていますか?期待?
追加された 著者 Voo,
少なくとも1つのアクティビティが生きている限り、あなたのランニングアベレージを明確にしたくないですか?あなたがホームボタンを押した場合、平均値はすぐにクリアされるべきですか、またはosが最終的にあなたの活動を殺すときだけですか?ユーザーがメインアクティビティを再開しただけで、環境設定をクリアできますか?あなたのアプリが稼動している間だけこれらの平均を持続させたい場合は、代わりにサービスについて考えましたか?
追加された 著者 Alex,

3 答え

私はこれを試していないが、ここで私がすることです:

  • 元の質問に対するコメントでAlexが述べたように、活動の間でアプリ全体の状態を共有するにはサービス
  • Activities の間を移動し、「新しい」アクティビティからサービスにバインドし、「古い」アクティビティからバインドを解除します。アクティビティを調整する方法については、こちらをご覧ください。
  • これを正しく実行すると、アプリが実行されている限り、アクティビティサービスに常にバインドされていることを確認できます。アプリがもう実行されていないとき、つまりサービスの onDestroy()が呼び出された時点で、すべてのアクティビティがバインド解除されていることを示します。ここでクリーンアップを実行します。
2
追加された

だから、アンドロイドは、アプリが「完成」しているという概念を持っていません。残念ながら、 "onTerminate()"と同義語はありません。ランニング平均をクリアする時期を決める基準はいくつかありますか?

0
追加された
私はアプリがホーム画面に行くかどうかは、 "無効"と考えられますが、この無効と見なすことができるエッジケースがあるにもかかわらず、私は例外を喜んでしています...
追加された 著者 Sheehan Alam,
実際には、 android.app.Application クラスには onTerminate メソッドが存在します。しかし、このシナリオではエミュレートされたプロセス環境でのみ呼び出され、デバイス。
追加された 著者 curioustechizen,

Use SharedPreference.Editor to remove the preferences, and commit. Here's a link for you: http://developer.android.com/reference/android/content/SharedPreferences.Editor.html

0
追加された
私は好みを取り除く方法を知っている、私はただそれを削除するために把握する必要があります。
追加された 著者 Sheehan Alam,
それは彼が求めていることではありません。
追加された 著者 Kurtis Nusbaum,