#android #android-asynctask #screen-rotation
#Android #android-asynctask #поворот экрана
Вопрос:
Я пытаюсь написать действие, которое запускает AsyncTask для длительной операции и периодически публикует обновления статуса для действия. Я хотел бы убедиться, что AsyncTask корректно переносит поворот экрана или другие условия уничтожения, такие как ООМ.
Я прочитал эту тему в списке android-developers, что, в свою очередь, привело меня к этой реализации, которая почти то, что мне нужно. Однако последним шагом моей асинхронной задачи является удаление некоторых данных из преобразователя содержимого. Чрезвычайно важно, чтобы этот шаг не был пропущен, потому что данные конфиденциальны и не должны оставаться на телефоне при нормальных условиях. Однако ContentResolvers поступают из контекстов, в данном случае Activity, и с этой схемой Activity может быть нулевым к тому времени, когда AsyncTask будет готов выполнить удаление.
Безопасно ли получать ContentResolver из Activity при создании AsyncTask и сохранять его в течение всего срока действия Activity? Если нет, что я могу сделать, чтобы справиться с этим случаем?
Ответ №1:
Почему вы не получаете ContentResolver из приложения? Вам нужно понимать различные концепции, лежащие в основе Activity и контекста — только потому, что Activity является контекстом, не означает, что вам нужно использовать Activity для всех задач, которые он выполняет. Используйте Activity только для пользовательского интерфейса
Комментарии:
1. groups.google.com/group/android-developers/browse_thread/thread / … это письмо от того же разработчика, в котором говорится «Не используйте getBaseContext (), просто используйте контекст, который у вас есть». . Так что, я думаю, мой вопрос в том, какие контексты у меня есть? Является ли контекст приложения предпочтительнее базового контекста?
2. Да, контекст приложения является предпочтительным способом, потому что он существует всегда (если ваш код действительно выполняется в данный момент и нуждается в контексте, есть живой объект приложения). Создайте статический экземпляр вашего приложения. в нем onCreate: instance=this; и создайте общедоступное статическое приложение get() { возвращает экземпляр;}. Таким образом, у вас всегда будет контекст, когда он вам понадобится