Android: This Handler class should be static or leaks might occur

0x00

private Handler mHandler = new Handler() { public void handleMessage(Message msg) { switch (msg.what) { case 0: mTextView.setText("msg received"); break; } } };

以往我習慣這樣改變Android的UI,但是Android Studio Warning:
This Handler class should be static or leaks might occur.

0x01

原因比較簡單,msg發送的時候有一個delayed參數,如果在delayed參數以內該activity被destory了,但是mHandler還持有mContext等待接收消息,所以會引發內存泄漏。

0x02

solve idea:

private final MyHandler mHandler = new MyHandler(this); private static class MyHandler extends Handler { private final WeakReference<VideoFragment> mVideoFragment; public MyHandler(VideoFragment m) { mVideoFragment = new WeakReference<VideoFragment>(m); } @Override public void handleMessage(Message msg) { VideoFragment m = mVideoFragment.get(); if (m != null) { switch (msg.what) { case 0: m.mTextView.setText("msg received"); break; default:break; } } }}

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容