6

In alcune delle mie app uso alcuni oggetti singleton come "gestori". Li istanziamo in Application.onCreate e li passo allo ApplicationContext, che memorizzo in un WeakReference.Riferimento debole contesto Android

Alcuni dei metodi del "manager" avviare un'attività di fondo dopo essere stato chiamato da un Activity, quindi passare s' context al metodo, e il Activity tenere un WeakReference a quello pure (e l'uso che all'interno di un AsyncTask). Tale riferimento viene mantenuto fino alla prossima volta che un Activity chiama un metodo che va in background, quando WeakReference è impostato sul nuovo Activitycontext.

La mia domanda è, fa il ApplicationContext devono essere conservati in un WeakReference, e ci sono tutti i problemi con mantenendo s' il Activitycontext in quel modo?

risposta

9

La ragione per mantenere un WeakReference nel contesto dell'attività è in modo tale da non mantenere un riferimento a uno Activity che è stato o dovrebbe essere già distrutto. Nessun problema di questo tipo esiste per lo Application. In questo caso non è necessario un WeakReference.

È difficile commentare il tuo utilizzo del contesto dell'attività poiché non hai dettagliato per cosa esattamente lo stai usando. Sembra un po 'sospetto che tu stia cambiando il contesto per diverse attività. Se hai davvero bisogno di un contesto di attività specifico, questo potrebbe essere ok, ma se vuoi semplicemente un valido da usare con un AsyncTask allora prenderei in considerazione la possibilità di ripensare il tuo approccio. Probabilmente funzionerà, ma è un po 'hacky. Esistono altre opzioni che potrebbero essere più appropriate a seconda delle esigenze: IntentService e Loaders sono opzioni da considerare.

+0

Ho l'impressione che tu debba usare un 'contesto' di' Activity' in un AsyncTask. Mi sbaglio? Ci sono situazioni in cui 'ApplicationContext' non può essere usato? Se non ci sono, preferirei piuttosto usare 'ApplicationContext' (mi renderebbe la vita più facile). – Eliezer

+0

Solo un'aggiunta a sopra, da quello che so un 'ApplicationContext' non dovrebbe essere usato quando si istanzia un' View'. È corretto? – Eliezer

5

In generale, non è necessario mantenere il contesto dell'applicazione in WeakReference. Dovresti comunque tenere altri tipi di contesti in un WeakReference.