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