0

の助けを借りて、時間のかかるデータベース操作をバックグラウンドスレッドに入れようとしていますAsyncTaskAsyncTask可能なデバイスローテーションを処理するために、インスタンスをに保存し、onRetainNonConfigurationInstance()で再利用しますonCreate()。ここまでは順調ですね...

ただし、アクティビティはデバイスのローテーション後に再作成されるためActivity、自分のすべての参照をAsyncTask新しく作成されたものに更新する必要があります。問題は、SQLiteOpenHelper内部にAsyncTaskもコンストラクターを介して渡されるコンテキストインスタンスがあり、Activity前に古いインスタンスを渡したところですが、どうすれば新しいインスタンスに更新できActivityますか?

私はテストしました、それは私がの文脈を更新しなくてもうまくいくようですSQLiteOpenHelper。しかし、それが大丈夫かどうかはまだわかりません。

ありがとう

4

3 に答える 3

1

getApplicationContext()アクティビティ1()ではなく、アプリケーションコンテキスト()を使用する必要がありますthis。アクティビティコンテキストを使用する場合、それをリークします

于 2012-09-10T19:18:20.387 に答える
1

Activityこれを行うと、ガベージコレクターがインスタンスを解放できないため、インスタンスがリークしています。アプリによっては、これはメモリ使用量に致命的である場合とそうでない場合がありますが、いずれの場合も適切ではありません。

Contextデータベース用のアプリケーションを使用するか、使用するContentProvider独自のコンテキストを持つを作成する必要があります。

于 2012-09-10T19:19:33.007 に答える
0

コンテキストとメモリリークに関する印象的な記事を見つけました:http: //android-developers.blogspot.de/2009/01/avoiding-memory-leaks.html

于 2012-09-11T08:11:06.140 に答える