Android Asyntask: используйте слабую ссылку для контекста, чтобы избежать поворота экрана устройства
В Apress Pro Android 4 автор сказал, что:
[...] контекст текущей активности больше не будет действителен, когда устройство будет повернуто. [...] Один из подходов состоит в том, чтобы использовать слабую ссылку на активность вместо жесткой ссылки [...]
Но автор просто предлагает это и не говорит, как это делается. Кто сделал это раньше, пожалуйста, дайте мне пример.
Ответы
Ответ 1
Где-то в вашем 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
}
Ответ 2
Вот пример WeakReference для хранения контекста;
WeakReference<Context> cReference = new WeakReference<Context>(getApplicationContext());
Теперь мы можем использовать это weakReference для работы с Activity/Context.
Ответ 3
Если вы хотите восстановить предыдущую активность, почему бы не продолжить onSaveInstanceState и не восстановить ее позже.
Проверьте эту ссылку для получения более подробной информации
Сохранение состояния приложения