1.异步任务:使用子线程来执行耗时操作,然后再通过回调将结果返回给主线程
2.为什么用异步任务:
2.1)Android中使用线程的规则
a.主线程不能被阻塞,不能再主线程中执行耗时操作(不能超过5秒)
b.子线程不能访问UI控件
2.2)通过Handler线程通信机制,将子线程的数据传给主线程,在Android中已实现这种线程通信机制的类是AsyncTask,在AsyncTask类中通过接口回调,实现子线程与主线程之间的通信。
3.如何使用AsyncTask
3.1 创建类,并继承AsyncTask,同时声明三个泛型(Params,Progress,Result)
3.2 重写核心的两个方法:
Result doInBackground(Params…param);–>子线程执行的方法
void onPostExecute(Result result);–>主线程执行的方法
3.3 在子线程中执行方法内实现耗时操作,并将结果返回
3.4 在主线程中执行的方法内 将结果显示到UI上
3.5 在主线程中创建自定义的任务对象,并执行对象的execute()方法,启动任务
/**
* 自定义异步任务
* 三个泛型:
* 1.第一个泛型:Params 启动任务执行的输入参数,比如HTTP请求的URL。
* 2.第二个泛型:Progress 后台任务执行的百分比。
* 3.第三个泛型:Result 后台执行任务最终返回的结果,比如String。
*
*/
public class AsyncTaskStudy extends AsyncTask<String, Void, byte[]>{
@Override
protected byte[] doInBackground(String... params) {
// TODO 在子线程中执行的方法--完成指定的耗时任务
return null;
}
@Override
protected void onPostExecute(byte[] result) {
// TODO 在主线程中执行--方法的参数是子线程完成的结果(就是doInBackground完成后调用onPostExecute)
super.onPostExecute(result);
}
}