Подтвердить что ты не робот

Android Asyntask: используйте слабую ссылку для контекста, чтобы избежать поворота экрана устройства

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

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

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

4b9b3361

Ответ 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 и не восстановить ее позже.

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

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