夜来幽梦忽还乡 亲满堂 饭已香

今天在群里和别人唠起来实时搜索的问题,然后想到了handler的内存泄漏,搞一哈。

为什么内存泄露

  • handler的生命周期和activity的不一样

  • 相互引用,影响GC回收

解决办法

  • 静态内部类
  • 外部类
  • 弱引用
  • onDestroy
private static class MyHandler extends Handler {  
        private final WeakReference<HandlerActivity2> mActivity;  
  
        public MyHandler(HandlerActivity2 activity) {  
            mActivity = new WeakReference<HandlerActivity2>(activity);  
        }  
  
        @Override  
        public void handleMessage(Message msg) {  
            System.out.println(msg);  
            if (mActivity.get() == null) {  
                return;  
            }  
            mActivity.get().todo();  
        }  
    }  


@Override  
 public void onDestroy() {  
     mHandler.removeMessages(XXX);  //等等发送的消息
     mHandler.removeCallbacks(mRunnable);  
  
     //或者
     mHandler.removeCallbacksAndMessages(null); 
 }    

Over 回头望去,嗯......不曾回头

哈哈哈,小美的笑容我来守护
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题。内存泄漏大家都不陌生了,简单粗俗的讲,...
    宇宙只有巴掌大阅读 6,978评论 0 12
  • 被文同时发布在CSDN上,欢迎查看。 APP内存的使用,是评价一款应用性能高低的一个重要指标。虽然现在智能手机的内...
    大圣代阅读 10,270评论 2 54
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,151评论 25 709
  • Android 内存泄漏总结 内存管理的目的就是让我们在开发中怎么有效的避免我们的应用出现内存泄漏的问题。内存泄漏...
    _痞子阅读 5,538评论 0 8
  • 它古称汴梁 春秋时期叫启封 为避汉景帝刘启之名讳 改名开封 有意思的是 这么漫长的封建社会 它一直叫开封 原封未动...
    查文瑾阅读 2,405评论 1 4