在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;
}
}
}
}
}