@SuppressLint(“HandlerLeak”)能防止内存泄漏吗?

@SuppressLint(“HandlerLeak”)能防止内存泄漏吗?

使用@SuppressLint(“HandlerLeak”)究竟有什么作用?防止内存泄漏还是只是去掉警告???

@SuppressLint(“HandlerLeak”)

项目中经常会使用到Handler,用的时候随手就直接new一个出来便会有黄色警告,(Handler可能会内存泄漏,推荐你用静态内部类+实例化弱引用),使用快捷键提示时便会在Handler上面自动加上了@SuppressLint(“HandlerLeak”)这个注解,但我认为这个并没有起到防止内存泄漏的作用,还是推荐如提示说明:将Handler声明为静态类,在外部类中,实例化对外部类的弱引用,并在实例化处理程序时将此对象传递给处理程序。

静态Headler

	//静态内部类 弱引用
    private MyHandler mHandler = new MyHandler (getApplication());
    static class MyHandler extends Handler{
 		private WeakReference weakReference;
       	public MyHandler (Context context){
        	weakReference = new WeakReference(context);
        }
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            if (weakReference == null) {
				return;
			}
			switch(msg) {
				case xxx:
					break;
				default:
					break;
			}
        }

Handler.Callback

官方还提供了一个Handler.Callback接口。

	private Handler mHandler = new Handler(new Handler.Callback() {
        @Override
        public boolean handleMessage(Message message) {
            return false;
        }
    });

这样似乎也只是避免了警告,但没有实际作用,所以为了防止内存泄漏还是推荐使用静态内部类加弱引用的方式来实现Handler。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值