2014-03-01 62 views
3

當WeakReference被移除時,有沒有辦法提醒?我需要添加一個Android上下文到一個實例,我將它添加爲一個WeakReference,然後當/如果這個被刪除,我想處理一些事情?我認爲我在某個地方閱讀了這篇文章,但是因爲我不記得在哪裏,並且沒有找到它,所以我什麼都沒給:(當WeakReference被移除時的回調

回答

2

弱引用(wr)沒有提供回調,如果您需要正確的呼叫返回時,對象的最終化方法可以被重寫,以便在垃圾收集時執行某些操作(gc'd)。

wr提供的是一個referenceQueue(rq),它基本上是一個引用列表, 「T被gc'd。你在參考書中的構造函數中附加的ReferenceQueue。

ReferenceQueue<Drawable> rq = new ReferenceQueue<Drawable>(); 
    WeakReference<Drawable> wr = new WeakReference<Drawable>(dr, rq); 

一旦我們繪製的gc'd,應該的ReferenceQueue CONT在wr。

do{ 
     Reference<?> ref = rq.poll(); //this should be your weak reference 
     if(ref == null) break; 

     ref.get(); //Should always be null, cause referent is gc'd 

     // do something 

    }while(true); 

我們可能把WR的地圖,因爲我們沒有告訴什麼是「WR」的任何方式是,當我們把它找回來,從RQ - 畢竟其referrent爲空。它的意義只在於它指的是什麼,而這個意義不再存在,所以我們需要記錄這個意義,所以我們把它放在地圖上,關鍵是我們想採取的一些行動,甚至可能只是從地圖上刪除弱引用本身。

+0

謝謝,這看起來像我可以使用的東西 –

相關問題