Android Asyntask: Use weak reference for context to avoid device rotate screen

依然范特西╮ 提交于 2019-11-27 10:17:57

问题


In Apress Pro Android 4 the author has said that:

[...] context of currently running activity will no longer be valid when the device is rotated. [...] One approach is to use a weak reference to the activity instead of a hard reference [...]

But the author just suggest this, and does not tell how it is done. Who has done this before please give me an example.


回答1:


Somewhere in your AsyncTask you'll want to pass in your activity. Then you'll save that reference in a weak reference. Then you can dereference and use it again in onPostExecute.

Class member:

WeakReference<Activity> weakActivity;

Somewhere in AsyncTask, probably either constructor or onPreExecute:

weakActivity = new WeakReference<Activity>(activity);

In onPostExecute:

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



回答2:


Here is an example of WeakReference to store a context;

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

Now we can use this weakReference to do Activity/Context related work.




回答3:


If you want to restore the previous activity, why not go for onSaveInstanceState and restore it later on.

Check this link for more details

Saving application state



来源:https://stackoverflow.com/questions/9809336/android-asyntask-use-weak-reference-for-context-to-avoid-device-rotate-screen

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!