设计理念
- 将UI线程和子线程的【启动,停止,通信】模板化,并隐藏java线程技术
- UI线程负责,启动(execute)、取消(cancel)异步工作(子线程)
- UI线程负责,预启动处理逻辑,进度更新回调逻辑,异步工作取消回调逻辑,异步工作完成回调逻辑
- 子线负责:后台处理逻辑处理
AsynTask 内部代码框架(内部注释是我加的说明)
public abstract class AsyncTask<Params, Progress, Result> {
// sub Thread 后台处理逻辑处理
protected abstract Result doInBackground(Params... var1);
//UI Thread 预启动处理逻辑
protected void onPreExecute() {
throw new RuntimeException("Stub!");
}
// UI Thread 异步工作完成回调逻辑
protected void onPostExecute(Result result) {
throw new RuntimeException("Stub!");
}
//UI Thread 进度更新回调逻辑
protected void onProgressUpdate(Progress... values) {
throw new RuntimeException("Stub!");
}
//UI Thread 异步工作取消回调逻辑
protected void onCancelled(Result result) {
throw new RuntimeException("Stub!");
}
//UI Thread 异步工作取消回调逻辑
protected void onCancelled() {
throw new RuntimeException("Stub!");
}
}
AsynTask的doInBackground处理基本结构
@Override
protected Result doInBackground(String... params) {
Result result;//获取的方法
//这是在后台子线程中执行的
while(xxxx){
//....某些操作
//判断是否被UI cancel
if(isCanceled()) return result; ////该对象将会出现在onCanceled()的实参中
publishProgress(Progress... values);//推送进度数据
}
return result; //该对象将会出现在onPostExecute()的实参中
}
UI Thread的工作处理基本结构
AsynTask task=new XXXAsynTask();
task.execute(data1,data2,data3)//data类型为Params泛型指定,并会出现在doInBackground()中
....
if(条件) task.cancel() ;//取消异步任务
最后编辑于 :
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。