使用Handler致使內存泄露的解決方法
方法一:經過程序邏輯來進行保護。
1.在關閉Activity的時候停掉你的後臺線程。線程停掉了,就至關於切斷了Handler和外部鏈接的線,Activity天然會在合適的時候被回收。
2.若是你的Handler是被delay的Message持有了引用,那麼使用相應的Handler的removeCallbacks()方法,把消息對象從消息隊列移除就好了。
方法二:將Handler聲明爲靜態類。
靜態類不持有外部類的對象,因此你的Activity能夠隨意被回收。代碼以下:
static class MyHandler extends Handler {
@Override
public void handleMessage(Message msg) {
mImageView.setImageBitmap(mBitmap);
}
}
但其實沒這麼簡單。使用了以上代碼以後,你會發現,因爲Handler再也不持有外部類對象的引用,致使程序不容許你在Handler中操做Activity中的對象了。因此你須要在Handler中增長一個對Activity的弱引用(WeakReference):
static class MyHandler extends Handler {
WeakReference<Activity > mActivityReference;
MyHandler(Activity activity) {
mActivityReference= new WeakReference<Activity>(activity);
}
@Override
public void handleMessage(Message msg) {
final Activity activity = mActivityReference.get();
if (activity != null) {
// ... ...
}
}
}
linux
本篇文章來源於 Linux公社網站(www.linuxidc.com) 原文連接:http://www.linuxidc.com/Linux/2013-12/94065.htmide