欢迎来到天天文库
浏览记录
ID:40234632
大小:2.23 MB
页数:40页
时间:2019-07-27
《Android移动应用开发实用教程教学课件作者夏辉第8章节Android多线程课件》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Android移动应用开发实用教程8Android多线程第章本章内容8.1Android线程简介8.2循环者—消息(Looper-Message)机制8.3AsyncTask类8.4Android其它创建多线程方法8.5多线程同步与通信8.7实验:Android多线程8.6多线程使用原则本章小结8.1Android线程简介线程是进程中的一个实体,是被系统独立调度和分配的基本单位。在一个进程中可以创建几个线程来提高程序的执行效率,并且有些程序还通过采用多线程技术来同时执行多个不同的代码模块。同一个进程中的多个线程之间可以并发执行。就像日常工作中由多人同时合作完成
2、一个任务。这种在很多情况下可以改善程序的相应性能,提供资源的利用效率,在多核CPU时代,这项能力显得尤为重要。与JavaSE、JavaME、JavaEE相同,在android平台下也支持多线程,多线程编程为充分利用系统资源提供了便利,同时也为设计复杂用户界面和耗时操作提供了途径,提升了Android用户的使用体验。8.1Android线程简介Android下的多线程与JavaSE、JavaME、JavaEE又有所不同,主要有2个方面,分别是不带消息循环的线程和带消息循环的循环者—消息机制。1.不带消息循环的线程不带消息循环的线程与开发JavaSE、JavaME
3、、JavaEE中的线程相同,这种线程不参与消息循环,并且不应该调用参与消息循环的方法,就算调用了也无法正常工作。因此,显示Toast的线程就不能使用这种线程。2.循环者—消息机制(Looper-Message机制)Android系统启动某个应用后,将会创建一个线程来运行该应用,这个线程成为“主”线程。主线程非常重要,这是因为它要负责消息的分发,给界面上相应的UI组件分发事件,包括绘图事件。这也是应用可以和UI组件(为android.widget和android.view中定义的组件)发生直接交互的线程。因此主线程也通常称为用户界面线程(UI线程)。UI线程只用
4、1个,因此应用可以说是单线程(Single-threaded)的。8.1Android线程简介为了实现“线程安全”,Android规定只有UI线程才能更新用户界面和接受用户的按钮及触摸事件。因此有下面为使用UI单线程工作线程的两个规则:1)永远不要阻塞UI线程。2)不要在非UI线程中操作UI组件。由于Android使用单线程工作模式,因此不阻塞UI线程对于应用程序的响应性能至关重要。如果在你的应用中包含一些不是一瞬间就能完成的操作的话,你应用使用额外的线程(工作线程或是后台线程)来执行这些操作。8.2循环者—消息(Looper-Message)机制8.2.1M
5、essage和Handler介绍1.Message(消息)Message是线程间交流的信息。辅助线程如需要更新界面,则发送内含一些数据的消息给UI线程。2.Handler(处理者)Handler,它直接继承自Object,一个Handler允许发送和处理Message或者Runnable对象,并且会关联到主线程的MessageQueue中。当实例化一个Handler的时候,这个Handler可以把Message或Runnable压入到消息队列,并且从消息队列中取出Message或Runnable,进而操作它们。Handler主要有两个作用:1)在辅助线程中发送
6、消息。2)在UI线程中获取、处理消息。8.2.1Message和Handler介绍,Handler本身没有去开辟一个新线程。Handler更像是主线程的秘书,是一个触发器,负责管理从子线程中得到更新的数据,然后在主线程中更新界面。辅助线程通过Handler的sendMessage()方法发送一个消息后,Handler就会回调Handler的HandlerMessage方法来处理消息。【例8-1】Example8-1Handler消息处理者示例8.2.1Message和Handler介绍图8-1用Hander传递消息8.2.2MessageQueue和Loope
7、r介绍1.MessageQueue(消息队列)用来存放通过Handler发送的消息,按照先进先出执行。每个消息队列都会有一个对应的Handler。Handler会向消息队列通过两种方法发送消息:sendMessage或post。这两种消息都会插在消息队列队尾并按先进先出执行。但通过这两种方法发送的消息执行的方式略有不同:通过sendMessage发送的是一个消息队列对象,会被Handler的handleMessage函数处理;而通过post方法发送的是一个runnable对象,会自己执行。Android没有全局(Global)的消息队列,而Android会自动
8、为UI线程建立消息队列,但在子线程里并
此文档下载收益归作者所有