Android Asynctask:对上下文使用弱引用以避免设备旋转屏幕

时间:2012-03-21 17:00:49

标签: java android weak-references android-context

Apress Pro Android 4 中,作者说:

  旋转设备时,

[...]当前正在运行的活动的上下文将不再有效。 [...]一种方法是使用对活动的弱引用而不是硬引用[...]

但是作者只是建议这一点,并没有说明它是如何完成的。谁曾经这样做过请给我一个例子。

3 个答案:

答案 0 :(得分:75)

在您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
}

答案 1 :(得分:3)

以下是存储上下文的WeakReference示例;

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

现在我们可以使用这个weakReference来做与Activity / Context相关的工作。

答案 2 :(得分:1)

如果你想恢复之前的活动,为什么不去onSaveInstanceState并稍后恢复它。

查看此链接了解更多详情

Saving application state