Dopo aver letto this article, ho iniziato a pensare a perdite di memoria con Volley. Di solito, gli ascoltatori implementati con Volley hanno un riferimento implicito o esplicito alla classe esterna (l'attività). per esempio:In caso di perdite di memoria e utilizzo di WeakReference con Volley in Android
JsonObjectRequest jsonObjReq = new JsonObjectRequest(Request.Method.GET,
url, null,
new Response.Listener<JSONObject>() {
@Override
public void onResponse(JSONObject response) {
updateLayout();
}
}
in questo caso v'è un riferimento implicito ... o mi può essere utile per creare un costume JsonObjectRequest a interiorizzare la gestione delle risposte, e la necessità di passare un riferimento all'attività di chiamata nel suo costruttore .
Ora diciamo che avvio una richiesta web, ma prima che la risposta ritorni, mi allontano dall'attività che ha avviato la richiesta. Da quello che ho capito, l'oggetto JsonObjectRequest avrebbe mantenuto un riferimento alla mia attività e avrebbe impedito che fosse Garbage Collection.
-Sto che capisco correttamente, è una paura legittima?
- La libreria Volley si occupa automaticamente di questo?
-Se sto creando un oggetto personalizzato JsonObjectRequest e passando un "questo" (riferimento all'attività), devo creare un WeakReference per l'attività?
Dai un'occhiata alla [documentazione del volley] (https://developer.android.com/training/volley/simple.html). Sembra che se ti assicuri di chiamare cancel sulle tue richieste di volley nel metodo 'onStop()' del tuo frammento/attività, il gestore non verrà chiamato. Suppongo che questo significhi anche rimuovere il riferimento al frammento/attività, il che significa che il frammento/attività non è più trapelato. –
@tmalseed grazie, dovresti postare il tuo commento come risposta, e lo accetterò – Siavash
Non sono convinto al 100% che sia la risposta corretta o più appropriata. Ho seguito il mio stesso consiglio e * potrebbe * aver ancora perso l'attività .. –