美文网首页
Activity中Handler潜在内存泄漏的问题

Activity中Handler潜在内存泄漏的问题

作者: 一叶一声秋 | 来源:发表于2016-07-21 15:11 被阅读93次

    在activity的ui变更中,我们经常会使用到Handler来配合,但是这样的做法有一个潜在的内存泄漏问题,因为同一个线程下的handler共享一个looper对象,消息中保留了对handler的引用,只要有消息在队列中,那么handler便无法被回收,如果handler不是static那么使用Handler的Service和Activity就也无法被回收。这就可能导致内存泄露。当然这通常不会发生,除非你发送了一个延时很长的消息。

    在Android Studio中经过语法检查一般会得到类似下面的一条警告

    • this Handler class should be static or leaks might occur
      官方的建议是把Handler改成静态的,这样就能避免无法回收的问题
    static class ViewHandler extends Handler {   
      MainActivity mActivity;  
      public ViewHandler(MainActivity activity) {
           mActivity = new WeakReference<>(activity).get();  
     }   
    @Override   
    public void handleMessage(Message msg) {
           switch (msg.what) { 
              case SET_TEXT:  
                      mActivity.runTime_edt.setText(String.valueOf(ConfigData.getRunTime()));   
                break;     
        ....UI操作 
         }  
     }
    

    使用的时候

    ViewHandler viewHandler = new ViewHandler(MainActivity .this);
    viewHandler.sendEmptyMessage(SET_TEXT);
    
    

    相关文章

      网友评论

          本文标题:Activity中Handler潜在内存泄漏的问题

          本文链接:https://www.haomeiwen.com/subject/gpubjttx.html