2012-05-08 13 views

risposta

2

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:

  1. creazione di nuovi oggetti: creazione di nuovi punti di vista, adattatori, ascoltatori:

    TextView tv = new TextView (getContext()); Adattatore listAdapter = new SimpleCursorAdapter (getApplicationContext(), ...);

  2. Accesso alle risorse comuni standard: Servizi come LAYOUT_INFLATER_SERVICE, SharedPreferences:.

    context.getSystemService (LAYOUT_INFLATER_SERVICE)
    getApplicationContext() getSharedPreferences (nome, modalità);

  3. 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:

  1. 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 )
  2. provare a utilizzare il contesto per l'applicazione invece di un contesto di un'attività
  3. 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
  4. spazzino non è una garanzia contro perdite di memoria