Android- AsyncTask 总结
2015-09-05 21:43
387 查看
1.回顾
上篇学习了 Android的 Handler 的知识和 异步更新 UI的操作;
2.重点
(1)AsyncTask 介绍
(2)AsyncTask 参数
(3)AsyncTask 重写的方法
(4)AsyncTask 与 Handler
3.AsyncTask 介绍
(1)AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作;
(2)为了不阻塞主线程(UI线程),且UI的更新只能在主线程中完成,因此异步处理是不可避免的;
(3)AsyncTask和Handler 均可 处理 异步任务
(4)AsyncTask 直接继承与 Object ,android.os.AsyncTask
注意:
(1)Task的实例必须在UI thread中创建;
(2)execute方法必须在UI thread中调用;
(3)不要手动的调用onPreExecute(), onPostExecute(Result),doInBackground(Params...), onProgressUpdate(Progress...)这几个方法;
(4)该task只能被执行一次,否则多次调用时将会出现异常;
4.AsyncTask 参数
(1)Params 启动任务执行的输入参数,比如HTTP请求的URL。
(2)Progress 后台任务执行的百分比。
(3)Result 后台执行任务最终返回的结果,比如String。
5.AsyncTask
重写的方法
(1) doInBackground(Params…,Progress,Result)
后台执行,比较耗时的操作都可以放在这里。注意这里不能直接操作UI。此方法在后台线程执行,完成任务
的主要工作,通常需要较长的时间。在执行过程中可以调用publicProgress(Progress…)来更新任务的进度。
(2) onPostExecute(Result)
相当于Handler 处理UI的方式,在这里面可以使用在doInBackground 得到的结果处理操作UI。 此方法在主
线程执行,任务执行的结果作为此方法的参数返回;
(3) onProgressUpdate(Progress…)
可以使用进度条增加用户体验度。 此方法在主线程执行,用于显示任务执行的进度。
(4) onPreExecute()
这里是最终用户调用Excute时的接口,当任务执行之前开始调用此方法,可以在这里显示进度对话框。
(5) onCancelled()
用户调用取消时,要做的操作
6.Handler 与 AsyncTask
(1) AsyncTask 使用起来 简单 ,快捷,过程可以控制;
(2) AsyncTask 在使用多个异步操作和并需要进行Ui变更时,就变得复杂起来;
(3) Handler 实现 通过 子线程 进行异步操作,后通过
Message 封装消息,handler执行 更新UI的变更;
(4) Hander 使用起来 结构清晰,功能定义明确
; 对于多个后台任务时,简单,清晰
;
(5) 在单个后台异步处理时,显得代码过多,结构过于复杂(相对性)
7. 代码示例
AsyncTask 多个 Map 参数 ,传递实现;
class upimgdataAsyncTask extends
AsyncTask<Map<String, String>, Void, String> {
@Override
protected String doInBackground(Map<String, String>... params) {
//执行异步任务
String url = "http://192.168.75.1:8080/UploadEmo/UploadImage";
UrlConnPostdata postdata = new UrlConnPostdata(url, params[0],
params[1]);
String result = postdata.connPost();
return result;
}
@Override
protected void onPostExecute(String result) {
//返回结果
textView1.setText("结果:" + result);
}
}
调用:
Map 数组 实现:
Map<String, String>[] maps = new Map[2];
maps[0] = new HashMap<String, String>();
maps[0].put("name", "Yuan");
maps[0].put("pass", "LABELNET");
maps[1] = new HashMap<String, String>();
maps[1].put("file", getSmallImage("/test.jpg"));
upimgdataAsyncTask asyncTask = new upimgdataAsyncTask();
asyncTask.execute(maps);
8.总结
不管是 AsyncTask 还是 Handler ,都均可 实现
异步加载数据,更新UI操作;用的时候,看习惯;
上篇学习了 Android的 Handler 的知识和 异步更新 UI的操作;
2.重点
(1)AsyncTask 介绍
(2)AsyncTask 参数
(3)AsyncTask 重写的方法
(4)AsyncTask 与 Handler
3.AsyncTask 介绍
(1)AsyncTask,是android提供的轻量级的异步类,可以直接继承AsyncTask,在类中实现异步操作;
(2)为了不阻塞主线程(UI线程),且UI的更新只能在主线程中完成,因此异步处理是不可避免的;
(3)AsyncTask和Handler 均可 处理 异步任务
(4)AsyncTask 直接继承与 Object ,android.os.AsyncTask
注意:
(1)Task的实例必须在UI thread中创建;
(2)execute方法必须在UI thread中调用;
(3)不要手动的调用onPreExecute(), onPostExecute(Result),doInBackground(Params...), onProgressUpdate(Progress...)这几个方法;
(4)该task只能被执行一次,否则多次调用时将会出现异常;
4.AsyncTask 参数
(1)Params 启动任务执行的输入参数,比如HTTP请求的URL。
(2)Progress 后台任务执行的百分比。
(3)Result 后台执行任务最终返回的结果,比如String。
5.AsyncTask
重写的方法
(1) doInBackground(Params…,Progress,Result)
后台执行,比较耗时的操作都可以放在这里。注意这里不能直接操作UI。此方法在后台线程执行,完成任务
的主要工作,通常需要较长的时间。在执行过程中可以调用publicProgress(Progress…)来更新任务的进度。
(2) onPostExecute(Result)
相当于Handler 处理UI的方式,在这里面可以使用在doInBackground 得到的结果处理操作UI。 此方法在主
线程执行,任务执行的结果作为此方法的参数返回;
(3) onProgressUpdate(Progress…)
可以使用进度条增加用户体验度。 此方法在主线程执行,用于显示任务执行的进度。
(4) onPreExecute()
这里是最终用户调用Excute时的接口,当任务执行之前开始调用此方法,可以在这里显示进度对话框。
(5) onCancelled()
用户调用取消时,要做的操作
6.Handler 与 AsyncTask
(1) AsyncTask 使用起来 简单 ,快捷,过程可以控制;
(2) AsyncTask 在使用多个异步操作和并需要进行Ui变更时,就变得复杂起来;
(3) Handler 实现 通过 子线程 进行异步操作,后通过
Message 封装消息,handler执行 更新UI的变更;
(4) Hander 使用起来 结构清晰,功能定义明确
; 对于多个后台任务时,简单,清晰
;
(5) 在单个后台异步处理时,显得代码过多,结构过于复杂(相对性)
7. 代码示例
AsyncTask 多个 Map 参数 ,传递实现;
class upimgdataAsyncTask extends
AsyncTask<Map<String, String>, Void, String> {
@Override
protected String doInBackground(Map<String, String>... params) {
//执行异步任务
String url = "http://192.168.75.1:8080/UploadEmo/UploadImage";
UrlConnPostdata postdata = new UrlConnPostdata(url, params[0],
params[1]);
String result = postdata.connPost();
return result;
}
@Override
protected void onPostExecute(String result) {
//返回结果
textView1.setText("结果:" + result);
}
}
调用:
Map 数组 实现:
Map<String, String>[] maps = new Map[2];
maps[0] = new HashMap<String, String>();
maps[0].put("name", "Yuan");
maps[0].put("pass", "LABELNET");
maps[1] = new HashMap<String, String>();
maps[1].put("file", getSmallImage("/test.jpg"));
upimgdataAsyncTask asyncTask = new upimgdataAsyncTask();
asyncTask.execute(maps);
8.总结
不管是 AsyncTask 还是 Handler ,都均可 实现
异步加载数据,更新UI操作;用的时候,看习惯;
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories