一.Handler机制
Handler的机制主要有四个关键对象
1.Message:是在线程间通信的消息,what可以携带int的标识,obj可以携带对象
2.Handler:主要用于发送消息和处理消息,(不能直接生成其对象,不然会有警告,原因是因为handler会隐式持有一个外部类的对象,但是当activity被回收时,handler还持有引用,这样会造成activity无法被回收,容易造成内存泄漏),可以创建一个handler继承Handler,为其添加一个对Activity的弱引用,
private static class MyHandler extends Handler{
private final WeakReference<MainActivity> mActivity;
public MyHandler(MainActivity activity){
this.mActivity = new WeakReference<MainActivity>(activity);
}
@Override
public void handleMessage(Message msg){
MainActivity mainActivity = mActivity.get();
if(mainActivity == null){
return;
}
}
}
3.MessageQueue:这个主要是存放handler发送的消息message。
4.Looper:这个为消息泵,俗称钩子,他会一直循环,他的作用就是去消息队列中取消息。
二.AsyncTask
这个工具内封装了Handler,让我们在主、分线程中切换更加方便
用法:由于他是一个抽象类,所以我们需要定义一个类去继承它
class DownLoadTask extends AsyncTask<Void,Integer,Boolean>{
// Void: 这个参数表示在执行asynctask时不需要传入参数,可以改为其他的
// integer,为操作进行的进度,可以用于进度条中
//Boolean 为当操作执行完之后返回的类型
//开始前的方法 (例如显示进度条)
@Override
protected void onPreExecute() {
super.onPreExecute();
}
//在子线程运行的耗时操作 (例如下载)
@Override
protected Boolean doInBackground(Void... voids) {
return null;
}
//Ui线程进行更新进度 (例如更新进度条)
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
//publishProgresss 实时发送进度至onPostExecute方法中
}
//当子线程的方法执行完毕后调用的方法 ,(例如提示更新完成)
@Override
protected void onPostExecute(Boolean aBoolean) {
super.onPostExecute(aBoolean);
}
}
调用时为生成其对象,调用 excute() 方法。
网友评论