一,防止持有Activity引用,不要在Activity创建内部类
直接另外建立一个class java文件,用来建立handler ,然后用弱引用保存Activity,然后用instanceof来比较是不是当前Acitivity
public class MyHandler extends Handler {
private WeakReference mActivity;
public MyHandler(Activity activity) {
mActivity = new WeakReference(activity);
}
@Override
public void handleMessage(Object msg) {
super.handleMessage(msg);
Log.e("print", msg.toString());
ServiceTestActivity testActivity = (ServiceTestActivity) mActivity.get();
testActivity.upDaterUI("测试handler");
}
}
///在Acitivity实现方法
public void upDaterUI(Object msg){
///start_Service 代表是某个控件
start_Service.setText(msg);
}
二、AsyncTask也是使用这种方式,也另外建立一个类
三、单例模式下的 弱引用 注册监听事件等
public class Singleton {
private static Singleton singleton;
private WeakReference<CallBack> callBack;
public static Singleton getInstance() {
if (singleton == null) {
singleton = new Singleton();
}
return singleton;
}
public void setCallBack(CallBack callBack) {
this.callBack = new WeakReference<>(callBack);
}
public CallBack getCallBack() {
return callBack.get();
}
public interface CallBack {
void callBack();
}
}
网友评论