课件android多线程编程技术.pptxVIP

  1. 1、本文档共18页,可阅读全部内容。
  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文档。上传文档
查看更多

第7章Android多线程编程技术

目标领会Android多线程编程思想和基本流程理解Android多线程编程中常用的Handler异步回调机制通过课堂代码实作演示,完成一个具体的能够进行基于Handler线程间通信的Android程序开发

问题引入耗时大的处理(如网络通信、下载、数据库处理)会阻塞主线程,导致用户界面失去响应,当用户界面失去响应超过5秒钟,Android系统会允许用户强行关闭应用程序。较好的解决方法是将耗时的处理过程转移到子线程上,从而避免用户界面(主线程)长时间失去响应。

问题引入案例演示如果案例中程序只有一个主线程,将会发生什么问题?如何解决?阻塞线程把耗时长的循环操作放到子线程中Android有阻止子线程更新由主线程创建的UI组件的机制,这个矛盾如何解决?让子线程循环告诉主线程去更新控件

线程安全与线程不安全Android主线程是线程不安全的。线程安全如果多个线程同时运行一段代码,每次运行结果和单线程运行的结果是一样的,就是线程安全的。线程不安全如果多个线程同时运行一段代码,每次运行结果和单线程运行的结果有可能是不一样的,就是线程不安全的。

异步回调机制——异步同步与异步同步调用:是一种阻塞式调用,调用方要等待对方执行完毕才返回,它是一种单向调用。异步调用:不需要等当前执行的动作完成,就可以继续执行后面的动作。例:如张三需要一份文件还有一个会议要开,他让李四去做文件,如果他一直等到文件写完拿到后才能去开会这就是同步;如果告诉李四你写着,我去开会,这就是异步。

异步回调机制——回调回调被调用方在被调用时也会调用对方。ABA调用B中方法B调用A中方法

异步回调机制——回调classA{ publicvoidmethodA(){ newB().methodB(this); } publicvoidprint(){ System.out.println(这是A的print);}}classB{ Aa=null; publicvoidmethodB(){ a.print(); } publicB(Aa){ this.a=a; } }

Handler异步回调机制Handler类位于android.os包下,负责发送和处理消息。每一个Handler实例都与创建它的线程和一个线程消息队列相绑定。Handler对象Handler对象主线程消息队列N:11:1

Handler异步回调机制Handler异步回调机制子线程通过Handler的方法将消息传递出去,不必等待主线程响应;Android系统将会自动调用Handler对象的消息处理方法处理消息。Handler对象获得并处理消息(主线程)Android系统发送消息(子线程)

Handler异步回调机制

Handler异步回调机制实现思想: 1、主线程创建一个Handler实例,并将其引用交给子线程。 2、当子线程有信息要和主线程沟通的时候就通过该引用把信息放到对应的消息队列中。 3、主线程轮询该消息队列,将消息从队列中取出,用Handler实例的一个指定方法handleMessage(Messagemsg)处理消息并对组件进行更改。

流程设计1、创建一个线程2、该线程每隔一段时间向主线程消息队列传送一个消息3、主线程轮询消息队列,收到消息后,自动调用回调方法处理消息,根据消息携带的数据改变UI组件的图像和位置。

程序开发演示请根据流程设计看具体程序实现。1、创建一个线程 Threadt=newThread(){ //该线程的功能具体实现看2.3 } t.start();

程序开发演示2、该线程每隔一段时间向主线程传送一个消息 Handlerhand=newHandler(Messagemsg){//2.1构造一个子、主线程通信渠道 publicvoidhandleMessage(){//2.2重写回调方法,当主线程收到信息后会自动调 //具体实现看步骤3 } }; Threadt=newThread(){ publicvoidrun(){//2.3重写Threadrun方法实现定时传消息 inti=0; while(true){ i++; Thread.sleep(300);//每隔0.3秒运行一次 Messagemsg=newMessage(); msg.arg1=i;//将i作为控制数据封装到消息中 hand.sendMessage(msg);//把消息发送出去 } }

程序开发演示3、主线程收到消息后,根据消息携带的数据改变UI组件的图像和位置。publicvoidhandleMessag

您可能关注的文档

文档评论(0)

153****4985 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档