Re: [問題] 跨class存取Handler
※ 引述《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.
}
}
}
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 118.163.58.205
※ 文章網址: http://www.ptt.cc/bbs/AndroidDev/M.1406884629.A.86B.html
推
08/01 23:02, , 1F
08/01 23:02, 1F
推
08/02 20:55, , 2F
08/02 20:55, 2F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):