2013-02-28 28 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?