Handler防止内存泄漏:
1.声明弱引用:
static classmyHandler extends Handler {
WeakReference<Activity >mActivityReference;
myHandler(Activity activity) {
mActivityReference= newWeakReference<Activity>(activity);
}
@Override
public void handleMessage(Message msg) {
//消息处理......
mActivityReference.get().控件更新
}
}
2.在activity关闭的时候停掉子线程,handler.removeCallbacks方法
Looper.Handler.Message三者关系
其实Looper负责的就是创建一个MessageQueue
消息的创建者就是一个或多个Handle
Looper创MessageQueue并读Message
Handler发送Message
Looper构造方法创一个消息队列
Looper.prepare()方法不能被调用两次
所以一个线程中只有一个Looper实例
Looper.looper()必须在Looper.perpare()后执行
作用是拿到消息队列,无限循环读消息
Handler处理UI更新
HandlerThread赋予Handler处理网络请求能力,但不能更新UI
handler=new Handler(ht.getLooper(), newHandler.Callback())
Thread处理网络请求
AsyncTask处理网络请求加UI更新,使用多了会卡顿,可以使用静态方法.