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