handler機制的記憶體洩漏問題(handler + WeakReference優化Activity)
阿新 • • 發佈:2018-11-09
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