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

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

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

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

  • 如何比较两个不同活动的上下文对象..?
  • 家庭小部件可以有一个上下文吗?
  • 如何在Android中创建上下文? ContextThemeWrapper的目的是什么?
  • 获取应用程序上下文
  • Android DataBinding在哪里获取上下文?
  • Android Holo Light的风格根据所选的上下文而变化
  • 传递上下文作为DialogFragment的参数
  • 如何从非活动类中检索上下文?
  • 在你的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和稍后恢复。

    检查此链接了解更多详情

    保存应用程序状态