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; } } }}