Android Asyntask:使用上下文的弱引用来避免设备旋转屏幕

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

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

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

Solutions Collecting From Web of "Android Asyntask:使用上下文的弱引用来避免设备旋转屏幕"

在你的AsyncTask某个地方,你需要传递你的活动。 那么你会把这个引用保存在一个弱引用中。 然后,您可以在onPostExecute解除引用并再次使用它。

class级成员:

 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 / Context相关的工作。

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

检查此链接了解更多详情

保存应用程序状态