Minha atividade está tentando criar um AlertDialog que requer um contexto como parâmetro. Isso funciona como esperado se eu usar:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
No entanto, desconfio de usar "this" como um contexto devido ao potencial de vazamento de memória quando a Activity é destruída e recriada, mesmo durante algo simples como uma rotação de tela. Em uma postagem relacionada no blog do desenvolvedor do Android :
Existem duas maneiras fáceis de evitar vazamentos de memória relacionados ao contexto. O mais óbvio é evitar escapar do contexto fora de seu próprio escopo. O exemplo acima mostrou o caso de uma referência estática, mas as classes internas e sua referência implícita à classe externa podem ser igualmente perigosas. A segunda solução é usar o contexto do aplicativo. Esse contexto permanecerá enquanto seu aplicativo estiver ativo e não depende do ciclo de vida das atividades. Se você planeja manter objetos de vida longa que precisam de um contexto, lembre-se do objeto do aplicativo. Você pode obtê-lo facilmente chamando Context.getApplicationContext () ou Activity.getApplication ().
Mas para o AlertDialog()
nem getApplicationContext()
ou getApplication()
é aceitável como um contexto, pois lança a exceção:
"Não foi possível adicionar a janela - o token nulo não é para um aplicativo"
por referências: 1 , 2 , 3 , etc.
Então, isso realmente deve ser considerado um "bug", uma vez que somos oficialmente aconselhados a usar Activity.getApplication()
e ainda assim não funciona como anunciado?
Jim