Android Asyntask:使用弱引用作为上下文,以避免设备旋转屏幕

Apress Pro Android 4中,作者曾说过:

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

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


答案 1

在你的某个地方,你会想通过你的活动。然后,将该引用保存在弱引用中。然后,您可以取消引用并在 中再次使用它。AsyncTaskonPostExecute

类成员:

WeakReference<Activity> weakActivity;

中的某个位置,可能是构造函数或:AsyncTaskonPreExecute

weakActivity = new WeakReference<Activity>(activity);

在:onPostExecute

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

答案 2

下面是一个用于存储上下文的弱引用示例;

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

现在我们可以使用这个弱引用来做与活动/上下文相关的工作。


推荐