在《Apress Pro Android 4》中,作者说道:当设备旋转时,当前运行活动的上下文将不再有效。一种方法是使用对活动的弱引用,而不是硬引用。但作者只是提出了这个建议,并没有说明如何实现。请有经验的人给我一个示例。
在你的 AsyncTask
中,你需要将你的活动(activity)作为参数传递进去。然后你会保存一个弱引用(weak reference)来引用它。这样你就可以在 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
}
这里有一个使用弱引用(WeakReference)存储上下文的例子:
WeakReference<Context> cReference = new WeakReference<Context>(getApplicationContext());
activity
仍将是无效引用。如果我错了,请纠正我。 - q126yWeakReference
有一个叫做isEnqueued
的属性(我想是这个名字),你可以用它来判断被引用的对象是否已经被加入垃圾回收队列。如果是,那么你可以认为该对象已经无效了。 - Leo