Android 代码优化

1、Handler内存泄露问题

产生内存泄露原因:静态内部类持有外部类的匿名使用,导致在用户退出当前Activity时,handler内部的一些耗时操作还在运行,从而导致activity还被handler做引用,最终导致activity还存留在堆栈中,没有被回收,导致内存泄露。

解决:1.handler内部持有外部activity的弱引用。
        2.把handler改为静态内部类。
        3.在activity的onDestory方法内掉用mHandler.removeCallBack()。
      (只能90%的解决)

private MyHandler mMyHandler = new MyHandler(this);

private static class MyHandler extends Handler{

   // SoftReference<Activity> 也可以使用软应用 只有在内存不足的时候才会被回收
    private final WeakReference<Activity> mActivity;

    private MyHandler(Activity activity) {
        mActivity = new WeakReference<>(activity);
    }

    @Override
    public void handleMessage(Message msg) {
        Activity activity = mActivity.get();
        if (activity != null){
            //做操作
        }
        super.handleMessage(msg);
    }
}

private static final Runnable sRunnable = new Runnable() {
    @Override
    public void run() {
        //做操作
    }
};
发布了49 篇原创文章 · 获赞 2 · 访问量 8602

猜你喜欢

转载自blog.csdn.net/yangjunjin/article/details/103281985