Androi培新课件5.4 多线程异步刷新界面.pptVIP

Androi培新课件5.4 多线程异步刷新界面.ppt

此“教育”领域文档为创作者个人分享资料,不作为权威性指导和指引,仅供参考
  1. 1、本文档共19页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Androi培新课件5.4 多线程异步刷新界面

多线程异步刷新界面 前言 在之前的学习中我们掌握了使用Thread和Handler对ListView、GridView等控件进行异步加载,本节我们将学习对于整个界面的异步刷新。 课程内容 多线程异步刷新界面 技能拓展 初识Android UI常用控件(一) UI常用控件(二) 网络数据交互 Activity及本地数据存储 目录 异步刷新的作用 AsyncTask的用法 自定义线程池 多线程异步刷新界面 多线程异步刷新界面 异步刷新的作用 在大部分应用的使用过程中,我们都是通过访问网络来获得服务器数据的,比如首页里推荐的商品信息、头版头条的新闻内容等。这些数据的网络访问是需要消耗一定时间的。在这段时间内整个界面会处于黑屏的状态,这对用户来说是不好的体验。我们应该避免这样的情况发生,而采取的方式就是通过多线程异步刷新界面。 在Android4.0以后的版本开发过程中已经明确要求访问网络数据的操作必须放到子线程中进行。 多线程异步刷新界面 异步刷新的作用 在之前的学习当中我们使用到了Thread和Handler来实现异步加载。这是多线程异步刷新的一种方式,我们也可以使用AsyncTask或是自定义线程池来实现。其中AsyncTask是由Android提供的线程池,在Android3.0版本之前,它最多只能够并行5个子线程,多余的线程则需要进入等待队列。但是在3.0以后Google对其进行了改善使得我们可以使用AsyncTask来开启更多的子线程了。 多线程异步刷新界面 AsyncTask的用法 步骤一:使用AsyncTask时我们可以写一个自定义类来继承AsyncTask,并重写其中的方法: 多线程异步刷新界面 AsyncTask的用法 常用的重写方法 说明 运行时机 onPreExecute 子线程运行前的准备工作 在运行doInBackground之前自动调用 doInBackground 子线程运行的主体代码 onPostExecute 子线程运行后的收尾工作 运行完doInbackground之后自动调用 onProgressUpdate 子线程运行进度发生变化时调用 可由publishProgress(int progress)方法触发 onCancelled 子线程取消时调用 可由AsyncTask对象的cancel方法触发 多线程异步刷新界面 AsyncTask的用法 在集成AsyncTask时需要指定它的3个参数类型: 这3个类型将会直接影响上述重写方法的参数类型和返回值类型。 影响doInBackground和execute方法的参数类型 影响onProgressUpdate和publishProgress的参数类型 影响doInBackground的返回值和onPostExecute的参数类型 多线程异步刷新界面 AsyncTask的用法 步骤二:完成AsyncTask子类各方法的重写后,我们就能调用这个子类来开启子线程了: execute()方法的参数对应着继承的AsyncTask类的第一个参数 多线程异步刷新界面 AsyncTask的用法 当执行了execute方法后,AsyncTask对象将会自动依次调用onPreExecute()→doInBackground() →onPostExecute()方法。 当需要更新线程的执行进度时我们可以调用publishProgress方法来触发onProgressUpdate方法。 当需要取消线程时,可以调用cancel方法,同时会触发onCancelled方法。 多线程异步刷新界面 AsyncTask的用法 注意: AsyncTask是线程池的一种,能同时运行多个子线程,而Thread只是开启了一个线程,但是并没有限制线程的个数; Thread开启的子线程是无法访问到控件的,因此需要发送Message给Handler。但是AsyncTask可以再onPostExecute、onProgressUpdate、onCancelled方法中访问到UI线程中的控件,因此不需要Handler。 多线程异步刷新界面 AsyncTask的用法 在Android3.0以后,AsyncTask做出了一些调整: 修改了execute方法,每次只启动一个线程执行一个任务,完成之后再执行第二个任务 新增了executeOnExecutor方法,需要多传入一个线程池对象用来替代最大数为5的默认线程池。 多线程异步刷新界面 自定义线程池 对于无法使用AsyncTask的情况,我们可以通过自定义线程池来进行对子线程的管理。我们通过Executors类的各种静态方法来创建不同规格的线程池:

文档评论(0)

130****9768 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档