10

私はタスクリストを作成していて、すべてのタスク(およびメタデータ)を保持するProjectオブジェクトを持っています。アクションログを使用しているので、タスクが変更されてもすぐにデータベースに保存するのではなく、アクティビティの終了時にデータベースにダンプするためにメモリに保持するだけです。これには、アクティビティのonDestroyメソッドが最適です。onRetainNonConfigurationInstanceメソッドが呼び出されなかった場合は、プロジェクトを保存するためのサービスを開始します(インスタンスはアプリケーションに保存されます)。保存には費用がかかります:DBプロジェクトにはリビジョンがあるので、新しいデータを保存し、現在のリビジョンを変更し、以前のリビジョンのデータを削除します。だから私は突然のアプリケーションの停止を恐れていません。

しかし、ドキュメントによると、私はしなければなりませんdo not count on this method being called as a place for saving data.

データを保存するための代替の場所はありますか?

4

4 に答える 4

20

OnDestroyが常に呼び出されるとは限りません。ライフサイクルドキュメントから-

アクティビティがonStop()メソッドの呼び出しを受信すると、アクティビティは表示されなくなり、ユーザーが使用していないときに不要なほとんどすべてのリソースを解放する必要があります。アクティビティが停止すると、システムメモリを回復する必要がある場合、システムはインスタンスを破棄する可能性があります。極端な場合、システムはアクティビティの最後のonDestroy()コールバックを呼び出さずにアプリプロセスを強制終了する可能性があるため、onStop()を使用してメモリをリークする可能性のあるリソースを解放することが重要です。

onPause()メソッドはonStop()の前に呼び出されますが、データベースへの情報の書き込みなど、より大規模でCPUを集中的に使用するシャットダウン操作を実行するにはonStop()を使用する必要があります。

アクティビティの停止を参照してください

于 2012-12-19T16:23:43.633 に答える
4

onDestroy()データの保存方法は使用しないでください。代わりに、内部/外部ストレージスペースを使用するか、onPause()メソッドにコードを記述してください。

于 2012-12-19T16:41:13.533 に答える
3

使用する必要がありますonStop

アクティビティドキュメント

を使用することもできますが、画面をオフにするなど、onPauseから離れるたびに呼び出されます。Activity

于 2012-12-19T16:21:54.053 に答える
2

アクティビティライフサイクルのドキュメントによると、データをonPause()またはに保存する必要がありますonSaveInstanceState(Bundle)

メソッドは、アクティビティがシャットダウンされる前に呼び出されることはonDestroy()ありません。onStop()

アクティビティライフサイクルドキュメントからの抜粋:

保護されたvoidonDestroy()

注:このメソッドがデータを保存する場所として呼び出されることを期待しないでください!たとえば、アクティビティがコンテンツプロバイダーでデータを編集している場合、それらの編集はここではなく、またはのいずれonPause()かでコミットする必要が onSaveInstanceState(Bundle)あります。

保護されたvoidonStop()

onPause()メソッドが呼び出された後、アクティビティのプロセスを実行し続けるのに十分なメモリがシステムにない低メモリの状況では、このメソッドが呼び出されない場合があることに注意してください。

于 2014-02-06T12:11:25.283 に答える