一个解决Handler Leak的NoLeakHandler<T>类

In Android, Handler classes should be static or leaks might occur, Messages enqueued on the application thread's MessageQueue also retain their target Handler. If the Handler is an inner class, its outer class will be retained as well. To avoid leaking the outer class, declare the Handler as a static nested class with a WeakReference to its outer class.

public abstract class NoLeakHandler<T> extends Handler
{
	private WeakReference<T> mT;

	public NoLeakHandler(T outClass)
	{
		mT = new WeakReference<>(outClass);
	}

	@Override
	public void handleMessage(Message msg)
	{
		T t = mT.get();
		handleMessage(msg, t);
	}

	public abstract void handleMessage(Message msg, T t);
}
使用的时候声明一个静态内部类(如MyHandler)继承NoLeakHandler<T>,T是 MyHandler的外部类。



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值