Su Android, un contesto viene utilizzato per molte operazioni, ma principalmente per caricare e accedere alle risorse. Questo è il motivo per cui tutti i widget ricevono un parametro di contesto nel loro costruttore. In una normale applicazione Android, di solito hai due tipi di contesto, attività e applicazione. Di solito è il primo a passare le classi e i metodi che richiedono un contesto:
È possibile ottenere il contesto richiamando getApplicationContext(), getContext(), getBaseContext() o questo (quando si è nella classe di attività).
usi tipici di contesto:
creazione di nuovi oggetti: creazione di nuovi punti di vista, adattatori, ascoltatori:
TextView tv = new TextView (getContext()); Adattatore listAdapter = new SimpleCursorAdapter (getApplicationContext(), ...);
Accesso alle risorse comuni standard: Servizi come LAYOUT_INFLATER_SERVICE, SharedPreferences:.
context.getSystemService (LAYOUT_INFLATER_SERVICE)
getApplicationContext() getSharedPreferences (nome, modalità);
Accesso ai componenti della Implicitamente:.. Per quanto riguarda i fornitori di contenuti, trasmissioni, intento
getApplicationContext() getContentResolver() query (uri, ...);
bisogna stare attenti quando si usano contesto perché mantengono anche può causare a perdite di memoria
In sintesi, al fine di evitare perdite di memoria di contesto, ricordare quanto segue:
- Do non mantenere riferimenti longevi a un'attività di contesto (un riferimento a un'attività deve avere lo stesso ciclo di vita dell'attività stessa )
- provare a utilizzare il contesto per l'applicazione invece di un contesto di un'attività
- Evitare classi interne non statici in un'attività se non si controlla loro ciclo di vita, utilizzare una classe interna statica e fare un riferimento debole all'attività dentro La soluzione a questo problema è quella di utilizzare una classe interna statica con un WeakReference alla classe esterna, come fatto in ViewRoot e la sua classe interna W per esempio
- spazzino non è una garanzia contro perdite di memoria
fonte
2012-05-08 11:25:02