Sobes.tech
Middle — Middle+

Ako získať prístup k fantómovému odkazu v systéme?

sobes.tech AI

Odpoveď od AI

V Android (Java) prostredí sa PhantomReference sledujú objekty, ktoré sú už pripravené na zbieranie odpadkov, ale ešte neboli odstránené z pamäte. Priamy volanie get() na PhantomReference nie je možné — vždy vráti null.

Prístup k objektu je možný iba cez ReferenceQueue, do ktorej sa umiestni PhantomReference po tom, čo sa objekt stane nedostupným. Preto je potrebné:

  1. Vytvoriť PhantomReference s ReferenceQueue.
  2. Monitorovať ReferenceQueue, aby ste zistili, kedy je objekt pripravený na odstránenie.

Príklad:

ReferenceQueue<MyObject> refQueue = new ReferenceQueue<>();
PhantomReference<MyObject> phantomRef = new PhantomReference<>(myObject, refQueue);

// V inom vlákne alebo cykle:
Reference<?> ref = refQueue.poll();
if (ref != null) {
    // Objekt myObject je pripravený na zbieranie
    // Tu môžete uvoľniť zdroje
}

Týmto spôsobom nie je priame prístup k objektu cez PhantomReference — slúži iba na oznámenie, že objekt je pripravený na odstránenie.