- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Handler运行机制.
本文主要讲解下AsyncTask的使用以及Handler的应用
首先,我们得明确下一个概念,什么是UI线程。顾名思义,ui线程就是管理着用户界面的那个线程!
android的ui线程操作并不是安全的,并且和用户直接进行界面交互的操作都必须在ui线程中进行才可以。这种模式叫做单线程模式。
我们在单线程模式下编程一定要注意:不要阻塞ui线程、确保只在ui线程中访问ui组件
当我们要执行一个复杂耗时的算法并且最终要将计算结果反映到ui上时,我们会发现,我们根本没办法同时保证上面的两点要求;我们肯定会想到开启一个新的线程,让这个复杂耗时的任务到后台去执行,但是执行完毕了呢?我们发现,我们无法再与ui进行交互了。
为了解决这种情况,android为我们提供了很多办法。
1)、handler和message机制:通过显示的抛出、捕获消息与ui进行交互;
2)、Activity.runOnUiThread(Runnable):如果当前线程为ui线程,则立即执行;否则,将参数中的线程操作放入到ui线程的事件队列中,等待执行。
3)、View.post(Runnable):将操作放入到message队列中,如果放入成功,该操作将会在ui线程中执行,并返回true,否则返回false
4)、View.postDelayed(Runnable, long)跟第三条基本一样,只不过添加了一个延迟时间。
5)、android1.5以后为我们提供了一个工具类来搞定这个问题AsyncTask.
AsyncTask是抽象类,定义了三种泛型类型 Params,Progress,Result。
Params 启动任务执行的输入参数,比如HTTP请求的URL
Progress 后台任务执行的百分比。
Result 后台执行任务最终返回的结果,比如String
用程序调用,开发者需要做的就是实现这些方法。
1) 子类化AsyncTask
2) 实现AsyncTask中定义的下面一个或几个方法
onPreExecute(),该方法将在执行实际的后台操作前被UI thread调用。可以在该方法中做一些准备工作,如在界面上显示一个进度条。
doInBackground(Params…),将在onPreExecute 方法执行后马上执行,该方法运行在后台线程中。这里将主要负责执行那些很耗时的后台计算工作。可以调用 publishProgress方法来更新实时的任务进度。该方法是抽象方法,子类必须实现。
onProgressUpdate(Progress…),在publishProgress方法被调用后,UI thread将调用这个方法从而在界面上展示任务的进展情况,例如通过一个进度条进行展示。
onPostExecute(Result),在doInBackground 执行完成后,onPostExecute 方法将被UI thread调用,后台的计算结果将通过该方法传递到UI thread.
为了正确的使用AsyncTask类,以下是几条必须遵守的准则:
1) Task的实例必须在UI thread中创建
2) execute方法必须在UI thread中调用
3) 不要手动的调用onPreExecute(), onPostExecute(Result),doInBackground(Params…), onProgressUpdate(Progress…)这几个方法
4) 该task只能被执行一次,否则多次调用时将会出现异常
[java]?view plaincopyprint?
package?.chenzheng_java;??
???
import?android.os.AsyncTask;??
/**?
?*??
?*?@author?chenzheng_java?
?*?@description?异步任务AcyncTask示例?
?*?????
?*/??
public?class?MyAsyncTask?extends?AsyncTaskString,?Integer,?Object?{??
???
?/**?
?*?该方法由ui线程进行调用,用户可以在这里尽情的访问ui组件。?
?*?很多时候,我们会在这里显示一个进度条啥的,以示后台正在?
?*?执行某项功能。?
?*/??
?@Override??
?protected?void?onPreExecute()?{??
?super.onPreExecute();??
?}??
???
?/**?
?*?该方法由后台进程进行调用,进行主要的耗时的那些计算。?
?*?该方法在onPreExecute方法之后进行调用。当然在执行过程中?
?*?我们可以每隔多少秒就调用一次publishProgress方法,
您可能关注的文档
最近下载
- 华为战略神器“五看三定”模型究竟是什么.doc VIP
- 【PPT课件】2018版安徽省建设工程计价依据宣贯(房建、装饰工程宣贯课件).docx
- 人教版英语八年级下册 Unit 9 Have you ever been to a museum 单元整体教学设计.docx VIP
- 表9.1.7 OPGW光缆安装检验批质量验收记录表.docx VIP
- 尊师惠师工作的创新策略与实施方案.docx
- 《旅游景区服务与管理》教案 第1课 认识旅游景区.pdf VIP
- 2025年宁夏中考语文试题及答案(word版).doc VIP
- 表9.1.3 导线、地线耐张管施工检验批质量验收记录表.docx VIP
- 麻醉术后苏醒延迟病例分析与管理.pptx VIP
- 2025至2030中国儿童口腔护理行业发展趋势与未来销售规模研究报告.docx VIP
文档评论(0)