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é:
- Vytvoriť PhantomReference s ReferenceQueue.
- 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.