2013-02-28 24 views
3

我知道,如果你直接初始化Handler並在Activity使用它,它會泄漏Context(的Alex Lockwood提供),用於例如這個Handler仍會泄漏上下文嗎?

public class SampleActivity extends Activity { 

    private final Handler mLeakyHandler = new Handler() { 
    @Override 
    public void handleMessage(Message msg) { 
     /* ... */ 
    } 
    } 
} 

所以我用下面的方法

private static class StaticHandler extends Handler { 

    private final WeakReference<SampleActivity> mSampleAct; 

    private StaticHandler(SampleActivity act) { 
     mSampleAct = new WeakReference<SampleActivity>(
       act); 
    } 

} 

然後我初始化如下

public class SampleActivity extends Activity { 
    private Handler myHandler = new StaticHandler(this) { 
     @Override 
     public void handleMessage(Message msg) { 
      super.handleMessage(msg); 
      processTask(msg.obj); 
     } 
    }; 
} 

我想知道如果我Handler即將myHandler仍然會泄漏Context,我怎麼能確定它不?

回答

2

使用WeakReference肯定是避免內存泄漏一個聰明的辦法。代碼對我來說看起來不錯,但確保它不會泄漏內存的最好方法是使用DDMS內存分析器。瞭解更多:Memory Analyzer Tool in android?