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相关推荐

  1. foursquared 1

    http://zhanwc.iteye.com/blog/834772 外国人真具有共产主义精神,Foursquare都拿出开源了,不像国内某些公司.Foursquare下载地址主页地址http:// ...

  2. foursquared 2

    http://zhanwc.iteye.com/blog/834774 为了提升手机端的响应速度,Foursquare采用了一种巧妙的措施,Foursquare在获取一个带图片的列表的时候,图片和文字 ...

  3. Android平台开源项目

    本文收集了比较不错的Android开源项目,研究开源项目是对Android平台掌握的一个最佳的方式. 由Android的核心开发团队提供了15个优秀的示例项目,包含了游戏.图像处理.时间显示.开始菜单 ...

  4. Android 开源项目集合

    2019独角兽企业重金招聘Python工程师标准>>> 上百个Android开源项目分享,希望对android开发有帮助. Android PDF 阅读器 http://source ...

  5. 众多Android 开源项目推荐,给力工作给力学习

    http://terryblog.blog.51cto.com/1764499/547777 原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.h ...

  6. Android开发者必须深入学习的10个应用开源项目

    Android开发又将带来新一轮热潮,很多开发者都投入到这个浪潮中去了,创造了许许多多相当优秀的应用.其中也有许许多多的开发者提供了应用开源项目,贡献出他们的智慧和创造力.学习开源代码是掌握技术的一个 ...

  7. Android 近百个项目的源代码,覆盖Android开发的每个领域

    Android PDF 阅读器 http://sourceforge.net/projects/andpdf/files/ 个人记账工具 OnMyMeans http://sourceforge.ne ...

  8. 上百个Android开源项目分享

    转载地址:[http://blog.csdn.net/bboyfeiyu/article/details/12234163] 上百个Android开源项目分享,希望对android开发有帮助. And ...

  9. 众多Android 开源项目再次推荐,学习不可错过

    FBReaderJ  FBReaderJ用于Android平台的电子书阅读器,它支持多种电子书籍格式包括:oeb.ePub和fb2.此外还支持直接读取zip.tar和gzip等压缩文档. 项目地址:h ...

最新文章

  1. (五)磁盘存储空间的管理
  2. Docker Machine 简介
  3. MFC单文档程序加载web网站和html文件
  4. TikTok 英国业务亏损、苹果从中国应用商店下架近4万款游戏、Zoom 接受调查等|Decode the Week...
  5. iOS框架介绍之coreImage
  6. BranchCache实验(1)总部的服务器配置
  7. LAMP详细搭建步骤
  8. jQuery第六章课后作业
  9. 频率与时间,电容,电感,电阻,计算机,分贝 单位换算
  10. sap成本流怎么看_SAP标准成本核算体系
  11. 苹果雪豹操作系统正式版_苹果发布WatchOS 6.1.2第三个测试版本,修复Bug、提升设备稳定性...
  12. SYN重要知识点总结
  13. Rasa课程、Rasa培训、Rasa面试系列 金融银行案例Bot Step By Step学习
  14. peoplesoft 日志
  15. mtk智能机平台LCM,CTP的ESD防护处理
  16. 大天使之剑武器都在哪掉落?
  17. 使用bedtools进行gwas基因注释
  18. ZYNQ学习之路9.USB总线学习(二)
  19. JAVA第一阶段 编程练习(1)
  20. 机器人之爱:为什么人与机器可以陷入浪漫的爱情?

热门文章

  1. 详解Java四大作用域
  2. 微软笔试2022.8.25
  3. 城市公交走廊出行特征分析
  4. 联想集团提交了IPO招股书
  5. 支付宝前端团队整理的《Web 前端开发入门手册》
  6. Proteus仿真汽车氛围灯驱动电路及呼吸效果
  7. 解决ENSP路由器启动之后一直出现#问题
  8. 使用兮克 2.5G 交换机将北京联通 EPON 改为 ODI 猫棒接入
  9. 为什么计算机有信息记忆功能,存储器是计算机实现记忆功能的一个重要组成部分...
  10. windows服务器双网卡链路聚合_Win10怎样绑定双网卡或多网卡做Nic Teaming链路聚合...