| 谈谈handler的内存泄露问题再来看看我们的新建Handler的代码:  
 private Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            ...
        }
    };  
 当使用内部类(包括匿名类)来创建Handler的时候,Handler对象会隐式地持有Activity的引用。 而Handler通常会伴随着一个耗时的后台线程一起出现,这个后台线程在任务执行完毕后发送消息去更新UI。然而,如果用户在网络请求过程中关闭了Activity,正常情况下,Activity不再被使用,它就有可能在GC检查时被回收掉,但由于这时线程尚未执行完,而该线程持有Handler的引用(不然它怎么发消息给Handler?),这个Handler又持有Activity的引用,就导致该Activity无法被回收(即内存泄露),直到网络请求结束。 另外,如果执行了Handler的postDelayed()方法,那么在设定的delay到达之前,会有一条MessageQueue -> Message -> Handler -> Activity的链,导致你的Activity被持有引用而无法被回收。 解决方法之一,使用弱引用:  
 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) {
            mImageView.setImageBitmap(mBitmap);
        }
    }
} https://blog.csdn.net/ly502541243/article/details/52062179
 
 
 其他handler的替代方案:
 
 EventBus事件总线——优雅地替换Handlerhttps://blog.csdn.net/stimgo/article/details/52684390
 RxJava线程切换代替Thread和Handlerhttps://www.jianshu.com/p/9d4e39a83a74
 RxAndroid 进行封装实现替代Handler的方案https://blog.csdn.net/z2wenfa/article/details/51276626
 使用RxJava和RxAndroid封装RxBus,实现EventBus功能https://blog.csdn.net/qq_33689414/article/details/51586250
   给 Android 开发者的 RxJava 详解http://gank.io/post/560e15be2dca930e00da1083
    
  |