2014-03-01 3 views
3

WeakReference가 제거되었을 때 경고를받을 수있는 방법이 있습니까? 인스턴스에 안드로이드 컨텍스트를 추가해야하는데, 이것을 WeakReference로 추가하면 제거 될 경우 몇 가지를 처리하고 싶습니다. 나는 이것을 어딘가에 대해 읽었다 고 생각한다. 그러나 원인에 대해서는 기억이 나지 않아 아무것도 찾지 못한다. (WeakReference가 제거 될 때의 콜백

답변

2

Weak Reference (wr)는 콜백을 제공하지 않는다. 적절한 호출이 필요한 경우 (Gc'd)

wr이 제공하는 것은 referenceQueue (rq)입니다. 이는 참조 대상이있는 reference의 목록입니다. 't은 gc'd되어가. 당신은 참조의 생성자에 referenceQueue을 연결합니다.

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

우리의 당김이 gc'd되면, referenceQueue은 계속한다 저기서. 모든 referrent가 null 후 - 우리가 무엇을 "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를 넣어 우리가 RQ에서 그것을 다시 얻을 때입니다. 중요한 의미는 단지 언급 된 것이므로 더 이상 존재하지 않습니다. 그래서 우리는이 중요성에 대한 기록이 필요합니다. 그래서 우리는 우리가 취하고 자하는 행동에 맞추어지도에 넣었습니다. 지도에서 약한 참조 자체를 삭제합니다.

+0

감사합니다. 사용 가능한 것 같습니다. –

관련 문제