菜鸟程序员的笔记(handler导致的内存泄漏的可能)

第一次写自己的优快云,感觉在开发老是遇见很多一样的问题,往往都只是有印象然后又记得不是很清楚,只好去翻以前的代码,很麻烦。最近看了一篇帖子,想要提高自己的身价和技术强度,除了高效的学习新知识外总结自己遇到的问题也是很重要的。所以才有了我今天的开始,可能我自己的总结也不是正确的,希望各位同行多多指正,各位的指正是我学习前进最好的方式。一个菜鸟程序员真诚的期望!

进入正题

在Android开发过程中经常会遇到这种情况,有时我们在子线程中跑的程序需要调用到主线程才能调用的方法,比如android嵌入h5开发过程中,web给我们发送了一个消息(注意 这是在子线程进行),通知我们进行某些操作,我的通常做法通过Hander对象的sendMessage()方法切回主线程,往往都是这样一个写法:

private Handler handler = new Handler(){
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
        }
    };

你会发现编译器会提醒我们:
This Handler class should be static or leaks might occur (anonymous android.os.Handler)
这样写会导致有内存泄漏的可能,往往我 这个rookie的做法就是按照提示直接在顶部加一个

@SuppressLint("HandlerLeak")

注释掉就不在管他,治标不治本,没有想到去优化,只要编译器没有报错就万事大吉。最近在学习过程中看到另外一种写法可以解决这个的问题。

private final Handler handler = new Handler(new Handler.Callback(){
    @Override
    public boolean handleMessage(Message msg) {
        return false;
    }
});

Handler有很多中导入的开源,这里本人用的是android.os.Handler。这是为什么以及具体的原理还不怎么了解,希望明白的朋友多多指导。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值