Контексты, AsyncTask и изменения вращения

Хорошо ли использовать getApplicationContext(), работающую с AsyncTask, чтобы не добавлять и отключать Activity, чтобы избежать утечек памяти , когда происходят изменения вращения и Активность уничтожена? Я считаю, что это должно быть правильно, поскольку мне действительно нужен Контекст, который зависит от приложения дыр, а не от самой активности.

И более того, в тех случаях, когда лучше использовать Activity как контекст (потому что вам нужен доступ к показу активности)... Вместо того, чтобы отделять его (присваивая null) когда он будет уничтожен, а затем назначит новый экземпляр в onCreate(), можно просто избежать отсоединения? Итак, просто переименовывая новый экземпляр, таким образом, мы могли бы избежать проблем с NullPointerException, потому что всегда было бы контекст для использования!

+3
источник поделиться
2 ответа

Из моего собственного опыта я могу сказать, что в большинстве случаев лучше использовать Activity как ваш Context, чем getApplicationContext() при работе с AsyncTask. Это связано с тем, что в большинстве случаев вам потребуется доступ к членам из вашей деятельности, и вам будет разрешено делать это, только если у вас есть ссылка на Activity в вашей AsyncTask.

Чтобы ответить на мой вопрос об избежании detach(), позвольте мне сказать, что в этом случае вы можете избежать этого или просто сделать это без каких-либо проблем, поскольку @CommonsWare заявляет в своем ответе. Итак, из того, что он говорит, мы уверены, что мы не получим NullPointerException, а активность будет равна нулю при изменении вращения:

onProgressUpdate() и onPostExecute() приостановлены между началом onRetainNonConfigurationInstance() и концом последующего onCreate()

Если я не ошибаюсь, основное различие между тем, чтобы не отделять явным образом и просто повторное присоединение нового в onCreate() вновь созданного Действия, - это то, что вы освобождаете старый экземпляр Activity несколько миллисекунд позже, когда только повторно присоединяетесь. Но конечное поведение в обоих случаях одинаково!

Надеюсь, это поможет кому-то еще!:)

0
источник

Этот пост и его ответы - хорошее объяснение того, что делать. Этот пост и его ответы объясняют хорошую теорию, лежащую в основе проблемы AsyncTask и Context.

+1
источник

Посмотрите другие вопросы по меткам или Задайте вопрос