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.

  • Schwache hashmap mit schwachen referenzen auf die werte
  • Bitmap, Bitmap.recycle (), WeakReferences und Garbage Collection
  • Testen Sie eine schwache Referenz, bevor Sie es Java verwenden
  • Sollten Adapter in Android statische innere Klassen oder nicht-statische innere Klassen sein
  • Weakreference get () Methode wie sicher ist es? (Android, asynctask)
  • Android Handler wechselt weakReference
  • Wie statische innere Klasse mit einer WeakReference zur äußeren Klasse kann Android Memory Leaks vermeiden? Brauchen Sie ein Beispiel
  • HashMap mit schwachen Werten
  • 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).

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.