Android 中 Handler的正確寫法

1.錯誤示範

        以前寫Handler的時候,是直接這樣寫的:

  Handler mHandler = new Handler(){
    @Override
    public void dispatchMessage(Message msg) {
      switch (msg.what){
         xxx;
      }
    }
  };

        然後 Android Studio就會貼心的提醒你:

This Handler class should be static or leaks might occur (anonymous android.os.Handler) 

錯誤的含義就是說,這樣寫有可能造成內存泄漏,因爲當Handler所在的組件消亡時,它可能繼續存在,造成內存泄漏。

2.正確寫法

    private static class MyHandler extends Handler {
 
        private WeakReference<MyActivity> activityWeakReference;
 
        public MyHandler(MyActivityactivity) {
            activityWeakReference = new WeakReference<>(activity);
        }
 
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            MyActivity activity = activityWeakReference.get();
            if (activity != null) {
               //處理handler消息
            }
        }
    }

 

正確的寫法是,使用靜態內部類的形式,配合弱引用,當宿主主鍵銷燬時,做一下判斷。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章