Re: [問題] 跨class存取Handler

作者: freesamael (燒賣)   2014-08-01 17:17:05
※ 引述《erttyy8821 (俠)》之銘言:
: 我有 a.class 和 b.class
: a.class extends Activity
: b.class extends Thread
: a底下有new一隻Handler
: 今天在b.class做完事情後想呼叫a.class的Handler去更新UI
: 目前使用public static的方式修飾 Handler
: 並直接call a.Handler.obtainMessage()去send Message
: 但我擔心這樣的呼叫方法會不會再a.class 這個acticity onStop時或其他狀況發生一些問題
: 有想過用Global Variable 但也不知道會不會有其他的問題
: 想問版上這樣的擔心是多餘的嘛?
: 或者還有其他的建議嘛?
: 目前不考慮使用broadcast receiver 單純想做這樣的嘗試!
Handler 用 static 是應該的。把 Handler 宣告成 non-static inner class 反而會有
lint 警告 "This Handler class should be static or leaks might occur"。
但是為了避免 activity leak,在 handler 裡對 activity 的 reference 還是應該使用
WeakReference<Activity>,而在 handleMessage() 裡使用 activity 前要先檢查
activity reference 是不是還存在。
public static class ActivityHandler extends Handler {
private WeakReference<Activity> mActivityRef;
...
public void handleMessage(Message msg) {
Activity activity = mActivityRef.get();
if (activity != null) {
// handle message here.
}
}
}
作者: erttyy8821 (俠)   2014-08-01 23:02:00
感謝! 這就是我想找的!!!!
作者: normanshi (原則就是原則)   2014-08-02 20:55:00
推 老實說WeakReference是個還蠻關鍵的觀念

Links booklink

Contact Us: admin [ a t ] ucptt.com