Android – java – WeakReferenzen mit einer ArrayList?

Ich weiß das mit einer WeakReference , wenn ich eine WeakReference zu etwas WeakReference , es sei denn, es gibt einen direkten Hinweis darauf, dass es Müll mit dem nächsten GC-Zyklus gesammelt wird. Meine Frage wird, was, wenn ich eine ArrayList von WeakReference s WeakReference ?

Beispielsweise:

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

Ich kann nun mit exArrayList.get(0).get() auf die Daten exArrayList.get(0).get() .

Meine Frage wird: Dies ist WeakReference Daten, werden die Daten bei exArrayList.get(0) GC'd mit dem nächsten GC-Zyklus? (Auch wenn ich nicht einen direkten Hinweis darauf habe) oder wird diese besondere Referenz arraylist bis der arraylist entleert ist? ( exArrayList.clear(); : exArrayList.clear(); ).

Wenn dies ein Duplikat ist, habe ich es nicht mit meinen Keywords in Google gefunden.

3 Solutions collect form web for “Android – java – WeakReferenzen mit einer ArrayList?”

  1. exArrayList.add(new WeakReference<String>("Hello")); Ist ein schlechtes Beispiel, weil String Literale niemals GC-ed sind

  2. Wenn es zB exArrayList.add(new WeakReference<Object>(new Object())); Dann nach einem GC würde das Objekt GC-ed sein, aber exArrayList.get(0) würde immer wieder WeakReference , obwohl exArrayList.get(0).get() würde null

Die Daten bei exArrayList.get(0) ist die WeakReference . Es ist nicht von selbst eine schwache Referenz, also wird es nicht gesammelt …

ABER das von exArrayList.get(0) verwiesene Objekt wird schwach referenziert, also kann es jederzeit gced sein (natürlich, das erfordert, dass es keine starken Verweise auf dieses Objekt gibt).

Damit

data.get(0) wird nicht null , aber data.get(0).get() könnte werden.

Mit anderen Worten, die Liste bezieht sich nicht auf das schwache referenzierte Objekt, sondern auf die schwache Referenz selbst.

Dies ist eine schlechte Idee, wie die anderen Plakate oben erklärt (Referenzobjekte nicht befreit). Verwenden Sie eine WeakHashMap mit den Objekten als Schlüssel und einige Dummy-Werte ("" oder Boolean.TRUE oder ähnliches).

  • Schwache hashmap mit schwachen referenzen auf die werte
  • Android Handler wechselt weakReference
  • HashMap mit schwachen Werten
  • Weakreference get () Methode wie sicher ist es? (Android, asynctask)
  • Was sind die Vorteile von WeakReferences?
  • Android Weak Referenz von Inner Class
  • Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.