看板 AndroidDev 關於我們 聯絡資訊
※ 引述《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
erttyy8821:感謝! 這就是我想找的!!!! 08/01 23:02
normanshi:推 老實說WeakReference是個還蠻關鍵的觀念 08/02 20:55