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的外部类。