Hander测试内存泄漏

public class CldMemoryOptiActivity extends Activity {

    private MyHandlder mMyHandler = new MyHandlder();

    class MyHandlder extends Handler {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            // while (true) {
            Log.i(CldMainUtil.TAG, "一直占用着Activity");
            // }
        }
    }

    MyClass myClass = new MyClass();

    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.java_basic_detail_layout);
        ((TextView) findViewById(R.id.top_title)).setText("内存溢出的例子");
        // ((TextView) findViewById(R.id.btn_detail_con)).setText(ex());

         mMyHandler.sendEmptyMessageDelayed(0, 100000);

        /**
         * 测试Handler的结果:比如延迟100000ms发送,来回切换此界面,内存是会一直增加,但是过了100S之后。内存感觉像是降下来了??
         * 难道内存回收了???
         */

    }

    class MyClass {

        public MyClass() {
        }
    }

}

通过上面代码测试. 连续进入->返回->进入->返回->进入->返回多次之后:立马输出hprof文件查看,内存都没有释放。通过搜索CldMemoryOptiActivity查看结果如下:

这里写图片描述

过了2分钟之后,再次输出hprof文件查看结果,如图所示:

这里写图片描述

3. 手动点击eclipse的Cause GC之后,再次输出文件查看:

这里写图片描述

为什么???


重新写代码,采用弱应用的方式:

public class CldMemoryOptiActivity extends Activity {

    private MyHandlder mMyHandler = new MyHandlder(this);

    static class MyHandlder extends Handler {
        WeakReference<CldMemoryOptiActivity> mWeakR;

        public MyHandlder(CldMemoryOptiActivity mWeak) {  
            mWeakR = new WeakReference<CldMemoryOptiActivity>(mWeak);
        }

        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            CldMemoryOptiActivity mOpti = mWeakR.get();
            if (mOpti != null) {
                Log.i(CldMainUtil.TAG, "一直占用着Activity");
            }

        }
    }


    @Override
    protected void onCreate(final Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.java_basic_detail_layout);
        ((TextView) findViewById(R.id.top_title)).setText("内存溢出的例子");
        mMyHandler.sendEmptyMessageDelayed(0, 100000);
        /**
         * 测试Handler的结果:比如延迟100000ms发送,来回切换此界面,内存是会一直增加,但是过了100S之后。内存感觉像是降下来了??
         * 难道内存回收了???
         */

    }

}

采用上面的方式重新测试:

同样没有释放,为什么????

难道是测试方式有问题???

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值