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