foursquared 3
http://zhanwc.iteye.com/blog/834777
AsyncTask解决网络读取的界面阻塞
手机从服务器获取数据的时候,是一个较耗时的操作,为了在获取网络读取的时候不阻塞用户操作,AsyncTask。为什么不采用多线程呢?
采用线程的方式方式是存在缺陷的:第一,线程的开销较大,如果每个任务都要创建一个线程,那么应用程序的效率要低很多;第二,线程无法管理,匿名线程创建并启动后就不受程序的控制了,如果有很多个请求发送,那么就会启动非常多的线程,系统将不堪重负。另外,前面已经看到,在新线程中更新UI还必须要引入handler,这让代码看上去非常臃肿。
为了解决这一问题,android在1.5版本引入了AsyncTask。AsyncTask的特点是任务在主线程之外运行,而回调方法是在主线程中执行,这就有效地避免了使用Handler带来的麻烦。阅读AsyncTask的源码可知,AsyncTask是使用java.util.concurrent框架来管理线程以及任务的执行的,concurrent框架是一个非常成熟,高效的框架,经过了严格的测试。这说明AsyncTask的设计很好的解决了匿名线程存在的问题。
AsyncTask是抽象类,子类必须实现抽象方法doInBackground(Params... p) ,在此方法中实现任务的执行工作,比如连接网络获取数据等。通常还应该实现onPostExecute(Result r)方法,因为应用程序关心的结果在此方法中返回。需要注意的是AsyncTask一定要在主线程中创建实例。AsyncTask定义了三种泛型类型Params,Progress和Result。
•Params 启动任务执行的输入参数,比如HTTP请求的URL。
•Progress 后台任务执行的百分比。
•Result 后台执行任务最终返回的结果,比如String。
•AsyncTask的执行分为四个步骤,与前面定义的TaskListener类似。每一步都对应一个回调方法,需要注意的是这些方法不应该由应用程序调用,开发者需要做的就是实现这些方法。在任务的执行过程中,这些方法被自动调用。
•onPreExecute() 当任务执行之前开始调用此方法,可以在这里显示进度对话框。
•doInBackground(Params...) 此方法在后台线程执行,完成任务的主要工作,通常需要较长的时间。在执行过程中可以调用publicProgress(Progress...)来更新任务的进度。
•onProgressUpdate(Progress...) 此方法在主线程执行,用于显示任务执行的进度。
•onPostExecute(Result) 此方法在主线程执行,任务执行的结果作为此方法的参数返回。
private static class CheckinTask extends AsyncTask<Void, Void, CheckinResult> {
protected void onPreExecute() {
mActivity.startProgressBar(mActivity.getResources().getString(
R.string.checkin_action_label), mActivity.getResources().getString(
R.string.checkin_execute_activity_progress_bar_message));
}
protected CheckinResult doInBackground(Void... params) {
Foursquared foursquared = (Foursquared) mActivity.getApplication();
Foursquare foursquare = foursquared.getFoursquare();
CheckinResult result =
foursquare.checkin( //网络读取 异步执行
mVenueId,
null,
LocationUtils.createFoursquareLocation(mLocation),
mShout,
!mTellFriends, // (isPrivate)
mTellFollowers,
mTellTwitter,
mTellFacebook);
}
protected void onPostExecute(CheckinResult result) {
if (DEBUG) Log.d(TAG, "CheckinTask: onPostExecute()");
if (mActivity != null) {
mActivity.onCheckinComplete(result, mReason);
}
}
protected void onCancelled() {
if (mActivity != null) {
mActivity.onCheckinComplete(null, new Exception(
"Check-in cancelled."));
}
}
}
foursquared 3相关推荐
- foursquared 1
http://zhanwc.iteye.com/blog/834772 外国人真具有共产主义精神,Foursquare都拿出开源了,不像国内某些公司.Foursquare下载地址主页地址http:// ...
- foursquared 2
http://zhanwc.iteye.com/blog/834774 为了提升手机端的响应速度,Foursquare采用了一种巧妙的措施,Foursquare在获取一个带图片的列表的时候,图片和文字 ...
- Android平台开源项目
本文收集了比较不错的Android开源项目,研究开源项目是对Android平台掌握的一个最佳的方式. 由Android的核心开发团队提供了15个优秀的示例项目,包含了游戏.图像处理.时间显示.开始菜单 ...
- Android 开源项目集合
2019独角兽企业重金招聘Python工程师标准>>> 上百个Android开源项目分享,希望对android开发有帮助. Android PDF 阅读器 http://source ...
- 众多Android 开源项目推荐,给力工作给力学习
http://terryblog.blog.51cto.com/1764499/547777 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.h ...
- Android开发者必须深入学习的10个应用开源项目
Android开发又将带来新一轮热潮,很多开发者都投入到这个浪潮中去了,创造了许许多多相当优秀的应用.其中也有许许多多的开发者提供了应用开源项目,贡献出他们的智慧和创造力.学习开源代码是掌握技术的一个 ...
- Android 近百个项目的源代码,覆盖Android开发的每个领域
Android PDF 阅读器 http://sourceforge.net/projects/andpdf/files/ 个人记账工具 OnMyMeans http://sourceforge.ne ...
- 上百个Android开源项目分享
转载地址:[http://blog.csdn.net/bboyfeiyu/article/details/12234163] 上百个Android开源项目分享,希望对android开发有帮助. And ...
- 众多Android 开源项目再次推荐,学习不可错过
FBReaderJ FBReaderJ用于Android平台的电子书阅读器,它支持多种电子书籍格式包括:oeb.ePub和fb2.此外还支持直接读取zip.tar和gzip等压缩文档. 项目地址:h ...
最新文章
- (五)磁盘存储空间的管理
- Docker Machine 简介
- MFC单文档程序加载web网站和html文件
- TikTok 英国业务亏损、苹果从中国应用商店下架近4万款游戏、Zoom 接受调查等|Decode the Week...
- iOS框架介绍之coreImage
- BranchCache实验(1)总部的服务器配置
- LAMP详细搭建步骤
- jQuery第六章课后作业
- 频率与时间,电容,电感,电阻,计算机,分贝 单位换算
- sap成本流怎么看_SAP标准成本核算体系
- 苹果雪豹操作系统正式版_苹果发布WatchOS 6.1.2第三个测试版本,修复Bug、提升设备稳定性...
- SYN重要知识点总结
- Rasa课程、Rasa培训、Rasa面试系列 金融银行案例Bot Step By Step学习
- peoplesoft 日志
- mtk智能机平台LCM,CTP的ESD防护处理
- 大天使之剑武器都在哪掉落?
- 使用bedtools进行gwas基因注释
- ZYNQ学习之路9.USB总线学习(二)
- JAVA第一阶段 编程练习(1)
- 机器人之爱:为什么人与机器可以陷入浪漫的爱情?
热门文章
- 详解Java四大作用域
- 微软笔试2022.8.25
- 城市公交走廊出行特征分析
- 联想集团提交了IPO招股书
- 支付宝前端团队整理的《Web 前端开发入门手册》
- Proteus仿真汽车氛围灯驱动电路及呼吸效果
- 解决ENSP路由器启动之后一直出现#问题
- 使用兮克 2.5G 交换机将北京联通 EPON 改为 ODI 猫棒接入
- 为什么计算机有信息记忆功能,存储器是计算机实现记忆功能的一个重要组成部分...
- windows服务器双网卡链路聚合_Win10怎样绑定双网卡或多网卡做Nic Teaming链路聚合...