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消息
}
}
}
正確的寫法是,使用靜態內部類的形式,配合弱引用,當宿主主鍵銷燬時,做一下判斷。