线程在Android开发中应用.docVIP

  1. 1、本文档共11页,可阅读全部内容。
  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文档。上传文档
查看更多
线程在Android开发中应用

线程在Android开发中应用   摘 要:Android中线程主要是用来处理一些耗时操作,防止UI线程阻塞,并进行异步处理以提高程序的效率的线程。在Android应用开发中,要时时考虑到用户的体验效果,因此对应用程序的执行效率要有很高的要求,这就使开发人员在Android开发中无可避免地使用线程。本文主要讨论Android应用开发中线程使用的意义、使用线程的方法、主线程和子线间的通信,以及介绍了Android SDK中提供的一些有关线程的工具类。   关键字:Android;主线程;子线程;消息   中图分类号: TP311.52 文献标识码:A DOI:10.3969/j.issn.1003-6970.2013.08.008   本文著录格式:[1]纪晓阳.线程在Android开发中的应用[J].软件,2013,34(8):24-26   0 前言   Android应用程序通常是运行在一个单独的线程(如:main)里。如果我们的应用程序所做的事情在主线程里占用了太长的时间的话,就会引发ANR(Application Not Responding)对话框,因为你的应用程序长期占用着主线程,而主线程一般是用来处理用户输入事件或者Intent广播。对于ANR的概念,在Android里,应用程序的响应性是由ActivityManager[1]和WindowManager[1]系统服务监视的当它监测到以下情况中任一个时:   a. 在5秒内没有响应输入的事件(例如,按键按下,屏幕触摸);   b. BroadcastReceiver [2]在10秒内没有执行完毕。   Android就会针对特定的应用程序显示一个ANR对话框(如图1所示为一个转码应用Lame中出现的ANP)显示给用户。   所以为了避免我们的应用程序出现ANR,就要让运行在主线程里的任何方法都尽可能少做耗时操作,例如网络或数据库操作,或者高耗时的计算(如改变位图尺寸)等。这时,我们就可以开启子线程来处理这些耗时操作以避免出现ANR。同时应用程序也应该避免在BroadcastReceiver里做耗时的操作或计算。但不再是开启子线程里做这些任务(因为BroadcastReceiver的生命周期短),如果响应Intent广播需要执行一个耗时的动作的话,应用程序应该启动一个Service来处理这些耗时操作。本文是举例介绍用户输入事件无响应的问题事例,主要讨论Android 程序中线程间的通信以及Android SDK中一些使用到线程的类和方法。   1 如何创建线程   Java??供了线程类Thread来创建多线程的程序,创建线程与创建普通的类的对象的操作是一样的,而线程就是Thread类或其子类的实例对象。每个Thread对象描述了一个单独的线程。要产生一个线程,有两种方法:   a. 需要从Java.lang.Thread类派生一个新的线程类,重载它的run()方法;   b. 实现Runnalbe[2]接口,重载Runnalbe接口中的run()方法。   这两种方法的区别就是,一个是直接创建Thread对象,另外一个是需要implement了Runnable接口对象作为创建Thread对象的参数。Runnable其实我们称为线程任务。   所以为了避免图1中出现的错误,我们可以在主线程中开启一个线程来执行耗时操作(如转码方法converTarg(src,targ)),主要代码如下:   当我们开启一个子线程,在子线程中进行转码操作时,如果在转码执行过程中,用户需要与界面进行交互(如触摸手机屏幕),这时事例应用Lame就不会出现图1的ANR对话框,而是继续进行正常转码(如图2),因为我们的转码操作是在子线程中进行的,没有占用主线程。   2 线程和主线程之间的通信   Android线程与一般的Java多线程处理方式是不同的,其中重点是消息发送和计划任务,接受消息发送和计划任务的处理是目标线程,它是通过Looper[2]机制维护消息队列,如果应用中有包含更新UI处理,则要把更新UI的处理代码放置在目标线程中,这个时候还要保障更新UI的线程是主线程。   开启线程主要就是处理应用程序中的耗时操作,处理完了就要把处理后的结果返回给主线程,由主线程再做进一步处理(如更新界面数据)。为了解决类似的问题,Android设计了一个Message Queue(消息队列 ), 线程间可以通过该Message Queue并结合Handler[3]和Looper组件进行信息交换。   Message对象为线程间交流的信息,该对象内包含子线程处理后的数据。Handler对象是Message的主要处理者,负责Message的发送,Message

文档评论(0)

317960162 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档