Android Handler 引發的內存泄露

使用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

相關文章
相關標籤/搜索