web-dev-qa-db-ja.com

Android Asynctask:デバイスの画面回転を回避するために、コンテキストに弱参照を使用します

Apress Pro Android 4で、著者は次のように述べています:

[...]デバイスを回転すると、現在実行中のアクティビティのコンテキストは無効になります。 [...] 1つのアプローチは、ハード参照の代わりにアクティビティへの弱い参照を使用することです[...]

しかし、著者はこれを提案するだけであり、それがどのように行われるかを述べていません。以前にこれを行った人は、例を挙げてください。

33
hqt

AsyncTaskのどこかに、アクティビティを渡す必要があります。次に、その参照を弱参照に保存します。その後、onPostExecuteで逆参照して再度使用できます。

クラスのメンバー:

WeakReference<Activity> weakActivity;

AsyncTaskのどこか、おそらくコンストラクタかonPreExecuteのいずれか:

weakActivity = new WeakReference<Activity>(activity);

onPostExecute内:

Activity activity = weakActivity.get();
if (activity != null) {
   // do your stuff with activity here
}
79
kabuko

以下は、コンテキストを格納するWeakReferenceの例です。

WeakReference<Context> cReference = new WeakReference<Context>(getApplicationContext());

これで、このweakReferenceを使用して、アクティビティ/コンテキスト関連の作業を行うことができます。

3
Akhil

以前のアクティビティを復元したい場合は、onSaveInstanceStateに移動して、後で復元してください。

詳細については、このリンクを確認してください

アプリケーションの状態を保存しています

1
prijupaul