2012-04-30 20 views
6

ユーザーがアプリケーションを終了したときにデータベースを消去する必要があるため、アプリケーションが終了したことを知りたいときユーザーがアプリケーションを終了した瞬間にSQLiteを消去する瞬間ですデータベース、どうすればこれを検出できますか?アプリケーションが終了したときに検出する

+2

**ドキュメントを読む:** http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycle –

+3

ええ、私はこれを知っていますが、質問は、アクティビティが終了すると、アプリケーションの合計が閉じられます。 – JLouis

+0

あなたが望むものは不可能です。あなたのプロセスは、ユーザまたはOSによっていつでも中止される可能性があり、その旨は通知されません。 – CommonsWare

答えて

7

あなたのメインアクティビティがfinish()ではないと仮定すると、そのアクティビティのonDestroy()メソッド内のデータベースをクリアすることは、達成したいことに最も近いかもしれません。コメントに指摘されているように、http://developer.android.com/reference/android/app/Activity.html#ActivityLifecycleを参照してください。

+0

onDestroy()は動作しないようですが、アンドロイドはonDestry()メソッドの実行をスキップします。 – San

+2

'onPause()'の使用は、 'onDestroy()'の実行が100%信頼できないためです。 - ありがとう、良い提案 –

15

これは欠陥のあるデザインアイデアです。システムの誤解を反映しています。プロセス全体が死んでしまうと死んでしまい、コードが実行されなくなります。

最後にonDestory()のアクティビティをクリーンアップすることはできますが、実際には実際に起こるとは限りません(メソッドはで、常にと呼ばれます)。失効したコピーが問題になった場合は、次の実行時にそれを掃除してください。

しかし、ndkを使ってプロセス終了シグナルのハンドラを提供することはできますが、それでもすべての場合に動作するとは思えません。あなたがすでに関わっている概念に精通していない限り、これから何らかの健全な機能を得る可能性は限られています。

あなたのアプリが動作している間にファイルが存在するため、ちょっとした間違いでセキュリティ機構をクリーンアップしてはいけません。あなたのアプリが予期しない方法で終了しても残っています。

+0

"古いコピーが問題になった場合は、次回の実行時にそれをクリーンアップしてください。" – Nactus

関連する問題