天天看點

Handler記憶體溢出解決方案

Handler引起記憶體溢出,解決方案

1.介紹

public class SampleActivity extends Activity {
    private final Handler mLeakyHandler = new Handler() {
     @Override
     public void handleMessage(Message msg) {
    // ... 
         }
    }
}
           

在使用handler時,這是一段很常見的代碼。但是,它卻會造成嚴重的記憶體洩漏問題。在實際編寫中,我們往往會得到如下警告:

⚠ In Android, Handler classes should be static or leaks might occur.

2.引起記憶體溢出的原因

詳細請參考:Android之Handler記憶體洩漏分析及解決

3.解決方案

/**
* 建立時間:2016/2/25 11 : 10
* 項目名稱:Heros
* 類說明:此類主要用來解決Handler引起的記憶體溢出
* 建立人: lc
*
* @since JDK 1.7.0
* Copyright (c) lc-版權所有
*/
public class WeakReferenceHandler<T extends Handler.Callback> extends Handler {
    private T handlerContainer;
    private Reference<T> handlerReference;

    public WeakReferenceHandler(T handlerContainer) {
        handlerReference = new WeakReference<>(handlerContainer);
    }

    public T getHandlerContainer() {
        return handlerReference.get();
    }

    @Override
    public void handleMessage(Message msg) {
        super.handleMessage(msg);
        Callback container = getHandlerContainer();
        if (container != null) {
            container.handleMessage(msg);
        }
    }
}
           

繼續閱讀