3

アプリケーションを閉じた後、アプリケーションのデータベースをクリアする(すべてのテーブルを削除する)必要があります。これをいくつかのアクティビティのonDestroy()に実装することにしました。私の知る限り、アプリケーションの実行が終了すると、すべてのonDestroy()メソッドが呼び出されます。

ただし、これが悪い習慣である場合は、アプリケーションを閉じたときにデータベースをクリアする他の方法をアドバイスしてください。

4

3 に答える 3

3

アプリのシャットダウン時にonDestroy()が呼び出される保証がないため、これは適切なオプションではありません。システムによって即座に終了される場合があり、その場合、データを消去することはできません。ドキュメントに記載されているように:

注: このメソッドがデータを保存する場所として呼び出されるとは考えないでください。たとえば、アクティビティがコンテンツ プロバイダのデータを編集している場合、それらの編集は、ここではなく onPause() または onSaveInstanceState(Bundle) でコミットする必要があります。このメソッドは通常、アクティビティに関連付けられているスレッドなどのリソースを解放するために実装されます。これにより、アプリケーションの残りの部分がまだ実行されている間に、破棄されたアクティビティがそのようなリソースを残さないようにすることができます。システムがこのメソッド (または他のメソッド) を呼び出さずにアクティビティのホスティング プロセスを単純に強制終了する状況があるため、プロセスがなくなった後も残り続けることを意図したことを行うために使用しないでください。

代わりに、 Applicationを拡張するクラスを作成し、存在する場合はonCreate()メソッドにテーブルをドロップする必要があります。このメソッドはアプリケーションのライフサイクルで一度だけ呼び出されるためです。

ただし、アプリの実行が停止するたびにデータを消去する必要がある場合は、データベースの使用を再検討する必要があります。データベースは永続的なストレージを目的としているためです。

于 2013-03-15T16:34:34.610 に答える
1

インメモリデータベースはあなたに適していますか? そもそもデータベースが永続ストレージに保存されることはなく、プロセスが有効でデータベース接続が開いている間だけ存在します。

于 2013-03-15T16:53:50.267 に答える
0

この回答を確認してください。

すべてのテーブルを削除するタイミングについては、 true を返すonPause()場合に、それを行うか、他のリソースを解放することをお勧めします。isFinishing()

簡単な注意: アプリケーションが多くのアクティビティで構成されている場合は、もちろん、ルート アクティビティの でのみこれを呼び出す必要がありますonPause()

幸運を!

于 2013-03-15T16:37:24.657 に答える