AsyncTask doinbackground onProgressUpdate onCancelled onPostExecute的基本使用
对于异步操作的原理我就不讲了。在这我着重讲怎么使用异步操作的doinbackground onProgressUpdate onCancelled onPostExecute这四个方法
doinbackground 我的理解效果相当于Thread里面的run。这样理解就easy多了,由于大家可能对Thread都非常熟悉,你能够把你想要首先处理的事物放在这里,可是有非常多人就会在这里更新ui操作。这是不能够的 ,要更新ui操作我们就要讲到onPostExecute这种方法啦
onPostExecute我们把它先override 出来看看他的结构
@Override
protected void onPostExecute(List<GovernmentInstitutionBean> result) {}
我们能够看到方法里面有一个result參数,类型是自定义的,那么这个result是从哪里传来的呢,没错了,通过doinbackground处理将结果返回给
onPostExecute方法result接收。在这种方法里面更新ui操作。List这个类型也不是凭空而来。而是在doinbackground方法里面也要设置
首先你得把方法的返回类型改一下
protected List<GovernmentInstitutionBean> doInBackground(Void... arg0) {
然后你得把类的參数改一下
class Task1 extends AsyncTask<Void, Void, List<GovernmentInstitutionBean>>
在doinbackground方法里面有个return 把你想要返回的数据return
override onPostExecute方法自然就能接收到了
说到这里你应该会简单的使用异步操作了,假设你还想要对它更细化的控制。异常的处理那么 onProgressUpdate onCancelled 这两个方法就呼吁而出了
onProgressUpdate 就是在你正在进行异步操作的时候提示用户你正在操作,让你的应用体验更加好,那么这种方法的使用也非常easy
首先你得覆盖它
@Override
protected void onProgressUpdate(Void... values) {
// TODO Auto-generated method stub
}
然后你得触发它
publishProgress();
在你想要触发正在处理的地方添上即可,至于你在onProgressUpdate里面作什么,一般都是弹窗,我这里是用progressdialog提示正在载入,那么就是这种
@Override
protected void onProgressUpdate(Void... values) {
// TODO Auto-generated method stub
pd = ProgressDialog.show(IndustrialPark_Activity.this, "提示信息",
"正在载入…");
}
在doinbackground方法一開始就弹出正在载入
protected List<GovernmentInstitutionBean> doInBackground(Void... arg0) {
// TODO Auto-generated method stub
try {
publishProgress();
.....
.....
......
}
那么这里要注意的是,假设载入成功的话就会跳到onpostexcute方法里面,假设载入失败的话呢。那么我们要让它跳到oncancelled方法里面,我们try catch一下doinbackground方法里面的处理,在catch里面加上
cancel(true);
这句代码,不管跳到哪都要记得你的pd还没消失呢。所以在两个方法里面都要写上让它消失的代码handler。sendmeesage…();
那么整个流程就讲的差点儿相同了。喜欢的请点赞,评论。不喜勿喷。
最新文章
- Sigar使用
- unity3d加载默认工程秒退怎么办
- storm入门(一):storm编程框架与举例
- 在虚拟机中安装CentOS7
- Linux 积累
- S1 : 传递参数
- JSP 相关试题(一)
- 06_init()和destroy()方法
- wait(...) notify() notifyAll()
- python笔记之第一次使用(未入门)
- android DialogFragment 实现Dialog展示扫二维码图片展示
- ACM 第十一届 河南省省赛A题 计划日
- 怎样监听vue.js中v-for全部渲染完成?
- Linux系统上安装nodejs
- Confluence 6 Oracle 驱动输入你的数据库细节
- sql实时提交事务
- 日常英语---二、注册google的api的key
- 文件路径、File协议、FTP协议、Http协议之间简单的区别
- linux 学习的一些书单,对了解android 也有大用
- lambdas vs. method groups
热门文章
- 【BZOJ 1016】 1016: [JSOI2008]最小生成树计数 (DFS|矩阵树定理)
- JMS介绍:我对JMS的理解和认识
- [CF626F]Group Projects
- vagrant 常用命令以及常用操作
- [转] 关于Struts-JSON配置(详解带实例struts2的json数据支持)
- Codeforces Beta Round #5 A. Chat Server&#39;s Outgoing Traffic 水题
- acdream 1725 哗啦啦的小彭玉染色问题 离散化并查集
- 模型的性能评估(二) 用sklearn进行模型评估
- .apk文件的MIME类型
- 发现一个可以搜索常用rpm包的地址(http://www.rpmfind.net/)