- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Android应用程序中多线程应用方法研究
Android应用程序中多线程应用方法研究
摘 要:在Android应用程序中,如果UI线程(主线程)处理事件占用的时间过长,就会出现ANR(应用程序无响应)异常。因此,为了确保用户顺畅的操作体验,我们需要将耗时长的任务(如:访问网络获取数据、大量的数据计算)分配给后台线程处理。其中涉及到UI线程与非UI线程信息交互等相关问题。本文将主要讨论如何最佳构建应用程序来提高响应性能并避免ANR异常。
关键词:Android;ANR异常;多线程技术;异步任务
中图分类号:TP311.52
Android是基于Linux平台的开源手机操作系统,目前已广泛地使用于手机等移动设备。由于Android的开源性,基于Android应用软件的开发也有着很好的市场前景。为保证Android应用软件的良好用户体验,合理地分配UI线程和后台线程中所执行的任务是极为重要的。因此,在开发Android应用程序时,引入多线程技术可以有效地明确应用程序的结构,保证应用程序的灵活性,降低任务间的耦合度,使得所开发的应用软件能够更加高效地运行。
1 Android的相关知识
1.1 Android基本组件
一个Android应用程序由松散耦合的组件组成,并由应用程序清单绑定到一起。它主要由以下五个基本模块构成:
活动(Activity):Android应用程序的核心,形成显示信息的图形用户接口并响应用户事件。
服务(Service):一直在后台运行,可以更新数据源和可见活动并触发通知。
内容(Context):用来管理和共享应用数据库,实现多个程序之间的数据共享。
意图(Intent):一个应用程序之间传递消息的桥梁。通过意图,可以在系统范围内向目标活动或者服务广播消息,以说明执行某个动作的意图。
广播接收器(Broadcast Receiver):通过创建和注册广播接收器,应用程序可以监听到匹配特定过滤器的意图广播,广播接收器会自动启动应用程序响应某个意图,这个特点使其成为事件驱动应用程序的最佳选择。[1]
1.2 Android事件处理
在绝大部分情况下,应用程序需要及时对用户动作做出响应。因此,Android应用程序与用户的交互是十分重要的。要实现用户与应用程序的交互,就需要编写Java代码来创建事件处理。
Android事件处理是一种“委托事件处理模型”(Delegation Event Model),分为“事件来源”(Event Source)和处理事件的“监听者”(listener)对象。当事件发生时,注册的监听者对象可以接收事件,然后调用相关方法进行处理,监听者是一个委托处理设置事件的对象。[2]
2 Android系统中多线程信息交互具体方法
2.1 多线程技术的使用
Android的UI线程主要负责处理用户的按键事件、用户触屏时间及屏幕绘图事件等,因此其他的操作是不能够阻塞UI线程的,否则UI界面会停止响应。Android系统默认约定当UI线程阻塞超过20秒时,将会引发应用程序无响应异常(ANR)。
为避免上述现象的发生,Android建议将耗时的操作放在新的子线程中完成。Android开发框架中主要提供了两种解决方法(以通过网络下载大量资源为例):
(1)首先,程序需要启动一个新的子线程来获取下载资源文件,资源获取结束后通过Handler机制发送消息(Message),并同时在UI线程中处理消息,从而达到异步线程中处理事件的效果,然后通过Handler Message方法来更新线程。
(2)使用Android中提供的AsyncTask方式来完成异步操作。AsyncTask是使用java.util.concurrent框架来管理线程以及任务的执行的,concurrent框架是一个非常成熟、高效的框架,经过了严格的测试。这说明AsyncTask的设计很好的解决了匿名线程存在的问题。[3]
当Android应用程序启动主线程时,主线程主要负责处理与UI相关的事件,并将相关的事件分配给对应组件进行处理。为了保证线程的安全性,Android规定:只允许主线程修改Activity中的组件。但是,在实际开发中,很可能需要启动新的子线程修改UI组件的属性,这就需要利用到Handler的消息传递机制。
2.2 Handler消息传递机制
Handler类主要包括两个作用:在新启动的线程中发送消息;在主线程中获取、处理消息。通过回调的方式,主线程能够处理新启动线程所发送的消息。当新启动的线程发送消息时,消息会发送到与之关联的MessageQueue,而handler会不断从MessageQueue中获取并处理消息。
您可能关注的文档
- 98例糖尿病合并消化性溃疡患者临床特点回顾性分析.doc
- 98例银屑病患者伴发代谢综合征临床特点.doc
- 999感冒灵颗粒及组分对小鼠急性毒性和饥饿状态下肝毒性影响研究.doc
- 99m TcMIBI心肌断层显像与冠状动脉造影对比分析.doc
- 99mTcMDP SPECTCT同机图像融合在骨转移肿瘤显像中诊断价值.doc
- 99mTcRBC动态显像定位诊断下消化道出血临床评价.doc
- 99Tcm4O―SPECT显像在亚急性甲状腺炎中诊断价值.doc
- 9E燃机IGV控制及常见故障分析.doc
- 9E燃机联合循环调相运行可行性分析及对藏中电网影响.doc
- 9E燃气轮机熄火转速升高原因分析及对策探讨.doc
文档评论(0)