La mia attività sta provando a creare un AlertDialog che richiede un contesto come parametro. Funziona come previsto se uso:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
Tuttavia, sono diffidente nell'usare "questo" come contesto a causa del potenziale per perdite di memoria quando l'attività viene distrutta e ricreata anche durante qualcosa di semplice come una rotazione dello schermo. Da un post correlato sul blog dello sviluppatore Android :
Esistono due semplici modi per evitare perdite di memoria relative al contesto. Il più ovvio è evitare di sfuggire al contesto al di fuori del proprio ambito. L'esempio sopra ha mostrato il caso di un riferimento statico ma le classi interne e il loro riferimento implicito alla classe esterna possono essere ugualmente pericolosi. La seconda soluzione è utilizzare il contesto dell'applicazione. Questo contesto durerà fino a quando l'applicazione sarà attiva e non dipenderà dal ciclo di vita delle attività. Se si prevede di mantenere oggetti di lunga durata che richiedono un contesto, ricordare l'oggetto dell'applicazione. Puoi ottenerlo facilmente chiamando Context.getApplicationContext () o Activity.getApplication ().
Ma per AlertDialog()
nessuno dei due getApplicationContext()
o getApplication()
è accettabile come contesto, in quanto genera l'eccezione:
"Impossibile aggiungere la finestra - token null non è per un'applicazione"
per riferimenti: 1 , 2 , 3 , ecc.
Quindi, questo dovrebbe davvero essere considerato un "bug", dal momento che ci viene ufficialmente consigliato di usare Activity.getApplication()
e tuttavia non funziona come pubblicizzato?
Jim