Моя активность пытается создать AlertDialog, который требует Context в качестве параметра. Это работает, как ожидалось, если я использую:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
Тем не менее, я опасаюсь использовать «this» в качестве контекста из-за потенциальной утечки памяти, когда Activity уничтожается и воссоздается даже во время чего-то простого, например, поворота экрана. Из соответствующего поста в блоге разработчика Android :
Есть два простых способа избежать утечек памяти, связанных с контекстом. Самый очевидный из них - избежать выхода за пределы контекста. В приведенном выше примере показан случай статической ссылки, но внутренние классы и их неявная ссылка на внешний класс могут быть одинаково опасными. Второе решение заключается в использовании контекста приложения. Этот контекст будет существовать до тех пор, пока ваше приложение живо и не зависит от жизненного цикла действий. Если вы планируете хранить долгоживущие объекты, которым нужен контекст, запомните объект приложения. Вы можете легко получить его, вызвав Context.getApplicationContext () или Activity.getApplication ().
Но для того , AlertDialog()
ни getApplicationContext()
или getApplication()
является приемлемым в качестве контекста, поскольку он бросает исключение:
«Невозможно добавить окно - токен ноль не для приложения»
Итак, действительно ли это следует считать «ошибкой», так как мы официально рекомендуем использовать, Activity.getApplication()
и все же он не функционирует так, как рекламируется?
Джим