1. AsyncTask
AsyncTask作为轻量级的线程处理类适用于简单的异步处理。
使用注意事项: 1.初始化以及execute()的调用必须在UI线程中。 2.一个初始化对象只能调用一次,否则会报异常。 2.Handler Handler的使用涉及到 Handler, Looper, Message,Thread四个对象。具体实现为:在Thread内部生成Message, Looper获取Message之后传递给Handler, Handler逐个获取Looper内的Message并处理,进行UI的更新。 注:Handler只能对具有Looper的消息进行处理,UI线程默认实现了Looper。可在线程中调用Looper.prepare();Looper.loop()来建立消息队列以及进行消息的循环。
private class MyAsyncTask extends AsyncTask<String,Integer,String>{
/**
* 该方法在execute()前调用,常用于一些进度条对话框的显示
* */
@Override
protected void onPreExecute() {
super.onPreExecute();
}
/**
* @param params 启动任务时execute()的参数类型,如URL
* */
@Override
protected String doInBackground(String... params) {
//后台耗时操作,该方法内不能直接更新UI
//通过publishProgress()来更新任务的进度
return null;
}
/**
* @param values 后台任务执行的百分比
* 多用于显示任务执行进度,在主线程中执行
* */
@Override
protected void onProgressUpdate(Integer... values) {
super.onProgressUpdate(values);
}
/**
* @param s 任务执行结束后的结果
* 参数为最后执行的返回结果,主线程中执行,操作UI
* */
@Override
protected void onPostExecute(String s) {
super.onPostExecute(s);
}
}
使用注意事项: 1.初始化以及execute()的调用必须在UI线程中。 2.一个初始化对象只能调用一次,否则会报异常。 2.Handler Handler的使用涉及到 Handler, Looper, Message,Thread四个对象。具体实现为:在Thread内部生成Message, Looper获取Message之后传递给Handler, Handler逐个获取Looper内的Message并处理,进行UI的更新。 注:Handler只能对具有Looper的消息进行处理,UI线程默认实现了Looper。可在线程中调用Looper.prepare();Looper.loop()来建立消息队列以及进行消息的循环。
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
//进行消息的处理
}
};
private class MyTread extends Thread{
@Override
public void run() {
super.run();
Message message = new Message();
//message.what = ;
//message.obj = ;
handler.sendMessage(message);
}
}
3.二者比较
Handler:
优点:结构清晰,功能定义明确。多个后台任务简单明了。
缺点:只有一个后台任务时,代码量较大。
AsyncTask:
优点:过程可控,简单快捷
缺点:多个后台任务更新 UI时复杂。
综上:具体使用还请参考项目实际需求。