handler机制导致内存泄漏的原因:
Activity在被结束之后,MessageQueue并不会随之被结束,如果这个消息队列中存在msg,则导致持有handler的引用,但是又由于Activity被结束了,msg无法被处理,从而导致永久持有handler对象,handler永久持有Activity对象,于是发生内存泄漏
Android引用对象的四种类型:强引用、软引用、弱引用、虚引用。
弱引用WeakReference举例:
private final MyHandler myHandler = new MyHandler(this);
private class MyHandler extends Handler{
private final WeakReference<MainActivity> mActivity;
public MyHandler(MainActivity activity) {
mActivity = new WeakReference<MainActivity>(activity);
}
@Override
public void handleMessage(Message msg) {
MainActivity activity = mActivity.get();
if (null != activity){
switch (msg.what){
case 1:
String str = msg.obj.toString();
txtRcv.append(str);
break;
case 2:
String stra = msg.obj.toString();
txtSend.append(stra);
break;
case 3:
break;
}
}
}
}
原文:https://blog.csdn.net/greatdaocaoren/article/details/74931440?utm_source=copy