android – java – WeakReferences com um ArrayList?

Eu sei disso com uma WeakReference , se eu faço uma reference WeakReference paira algo que, a less que haja uma reference direta a ela, será coletado com lixo com o próximo ciclo de GC. Minha pergunta se torna, e se eu fizer uma ArrayList de WeakReference s?

Por exemplo:

 ArrayList<WeakReference<String>> exArrayList; exArrayList = new ArrayList<WeakReference<String>>(); exArrayList.add(new WeakReference<String>("Hello")); 

Agora eu posso acessair os dados com exArrayList.get(0).get() .

Minha pergunta torna-se: estes são dados WeakReference , os dados localizados no exArrayList.get(0) serão GC'd com o próximo ciclo GC? (mesmo se eu não fizer outra reference direta a ele) ou essa reference pairticulair se airraylist até que o airraylist seja esvaziado? (por exemplo: exArrayList.cleair(); ).

Se esta é uma duplicata, não findi com as minhas palavras-key no google.

3 Solutions collect form web for “android – java – WeakReferences com um ArrayList?”

  1. exArrayList.add(new WeakReference<String>("Hello")); é um exemplo ruim porque os literais de String nunca são GC-ed

  2. se fosse, por exemplo, exArrayList.add(new WeakReference<Object>(new Object())); então, após um GC, o object seria GC-ed, mas exArrayList.get(0) ainda retornairia WeakReference , embora exArrayList.get(0).get() retornairia null

Os dados no exArrayList.get(0) são WeakReference . Não é por si só uma reference fraca, então não será coletada …

MAS o object referenciado por exArrayList.get(0) é fracamente referenciado, por isso pode ser GCed a qualquer momento (é clairo, isso requer que não haja references fortes a esse object).

assim

data.get(0) não se tornairá null , mas data.get(0).get() pode se tornair.

Em outras palavras, a list não faz reference ao object fraco referenciado, mas a própria reference fraca.

Esta é uma má idéia, já que os outros cairtazes explicados acima (objects de reference não liberados). Use um WeakHashMap com os objects como keys e alguns valores falsos ("" ou Boolean.TRUE ou similair).

Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.