Search code examples
javaandroidweak-referencesandroid-context

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


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.


Solution

  • 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
    }