在Java语言中,直接将Handler声明为Activity的内部类去使用Handler,非静态内部类会持有外部类的一个隐试引用,这样就可能造成外部类无法被垃圾回收,从而导致内存泄漏。
故而,给出规范的Handler使用方式如下:
Handler 的基类:
public class UIHandler<T> extends Handler{ protected WeakReference<T> ref; public UIHandler(T cla){ ref = new WeakReference<T>(cla); } public T getRef(){ return ref != null ? ref.get() : null; } }
Handler 运用实例:
public class MainActivity extends Activity{ private final MainHandler mHandler = new MainHandler(this); @Override protected void onCreate(Bundle savedInstanceState){ super.oncreate(savedInstanceState); setContentView(R.layout.activity_main); mHandler.post(mRunnable); } private static final Runnable mRunnable = new Runnable(){ @Override public void run(){ } }; private class MainHandler extends UIHandler{ private MainHandler(MainActivity activity){ super(activity); } @Override public void handleMessage(Message msg){ super.handleMessage(msg); MainActivity activity = (MainActivity)ref.get(); if(activity != null){ if (activity.isFinishing() return;
switch(msg.what){
case 1:
break;
} } } } }