Android Asyntask: используйте слабую ссылку для контекста, чтобы избежать поворота экрана устройства - PullRequest
28 голосов
/ 21 марта 2012

В Apress Pro Android 4 автор сказал, что:

[...] контекст текущей запущенной деятельности больше не будет действительнымкогда устройство вращается.[...] Один из подходов состоит в том, чтобы использовать слабую ссылку на упражнение вместо жесткой ссылки [...]

Но автор просто предлагает это, а не рассказывает, как это делается,Кто сделал это раньше, пожалуйста, дайте мне пример.

Ответы [ 3 ]

76 голосов
/ 21 марта 2012

Где-то в вашем AsyncTask вы захотите перейти в свою деятельность. Тогда вы сохраните эту ссылку в слабой ссылке. Затем вы можете разыменовать и использовать его снова в 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
}
3 голосов
/ 21 марта 2012

Вот пример WeakReference для хранения контекста;

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

Теперь мы можем использовать эту слабую ссылку для выполнения действий, связанных с деятельностью / контекстом.

1 голос
/ 21 марта 2012

Если вы хотите восстановить предыдущее действие, почему бы не перейти к onSaveInstanceState и восстановить его позже.

Проверьте эту ссылку для получения более подробной информации

Сохранение состояния приложения

...