第6章温度湿度实时系统程序开发_第1页
第6章温度湿度实时系统程序开发_第2页
第6章温度湿度实时系统程序开发_第3页
第6章温度湿度实时系统程序开发_第4页
第6章温度湿度实时系统程序开发_第5页
已阅读5页,还剩20页未读 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第6章温度湿度实时更新系统程序开发6.1案例展现6.2线程概述6.2.1进程和线程6.2.2Android主线程6.3线程类(Thread)6.3.1Thread的属性和方法6.3.2创建和启动新线程6.3.3子线程的休眠、中断6.3.4建立线程类6.4定时器Timer6.5Handler消息传递机制6.5.1Looper简介6.5.2Handler简介6.5.3Message简介6.6案例实现本章小结本章要点6.1案例展现6.2线程概述1.新建(newThread)当创建Thread类的一个实例(对象)时,此线程进入新建状态(未被启动)。2.就绪(runnable)线程已经被启动,正在等待被分配给CPU时间片,也就是说此时线程正在就绪队列中排队等候得到CPU资源。3.运行(running)线程获得CPU资源正在执行任务(run()方法),此时除非此线程自动放弃CPU资源或者有优先级更高的线程进入,线程将一直运行到结束。4.死亡(dead)当线程执行完毕或被其它线程杀死,线程就进入死亡状态,这时线程不可能再进入就绪状态等待执行。自然终止:正常运行run()方法后终止异常终止:调用stop()方法让一个线程终止运行5.堵塞(blocked)由于某种原因导致正在运行的线程让出CPU并暂停自己的执行,即进入堵塞状态。正在睡眠:用sleep(longt)方法可使线程进入睡眠方式。一个睡眠着的线程在指定的时间过去可进入就绪状态。正在等待:调用wait()方法。(调用motify()方法回到就绪状态)被另一个线程所阻塞:调用suspend()方法。(调用resume()方法恢复)6.2线程概述6.2.1进程和线程1.进程进程是指每个独立程序在计算机上的一次执行活动。例如,运行中的记事本程序、运行中的音乐播放器程序等。运行一个程序,就是启动了一个进程。多进程就是允许多窗口操作。2.线程线程是比进程更小的执行单元,基于线程的多任务处理就是一个程序可以执行多个任务,比如如今流行的视频播放软件,可以一边下载,一边播放,这就是存在下载和播放两个线程。线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。6.2.1进程和线程进程和线程的关系:1.一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。2.资源分配给进程,同一进程的所有线程共享该进程的所有资源。3.处理机分给线程,即真正在处理机上运行的是线程。4.线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。6.2.1进程和线程1.调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位2.并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可并发执行3.拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源.4.系统开销:在创建或撤消进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建或撤消线程时的开销。但是进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响,而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个进程死掉就等于所有的线程死掉,所以多进程的程序要比多线程的程序健壮,但在进程切换时,耗费资源较大,效率要差一些。6.2.1进程和线程结论:1.线程是进程的一部分2.CPU调度的是线程3.系统为进程分配资源,不对线程分配资源6.2.1进程和线程在一个Android程序开始运行的时候,会单独启动一个进程。默认的情况下,所有这个程序中的Activity或者Service都会在这个进程中运行。一个Android程序默认情况下只有一个进程,但一个进程下却可以有许多个线程。在这么多线程当中,有一个线程,我们称之为UI线程。6.2.2Android主线程Thread类是Java提供的用来创建线程的父类,综合了线程所需要的属性和方法,可以使用该类创建线程、进行线程的操作和设置线程优先级等操作。6.3线程类(Thread)6.3.1Thread的属性和方法6.3.1Thread的属性和方法Java中提供了两种创建新线程的方法。1.将类定义为Thread的子类,并重写run()方法。再使用子类对象调用start()方法启动线程,将执行权转交给run()方法。2.定义实现接口Runnable的类。重写接口中的抽象方法run()方法,然后把这个接口实现类的对象作为参数传入Thread的构造方法中,来创造一个新线程。3.两种创建线程方式的比较采用继承Thread类方式:优点:编写简单,如果需要访问当前线程,无需使用Thread.currentThread()方法,直接使用this,即可获得当前线程。缺点:因为线程类已经继承了Thread类,所以不能再继承其他的父类。采用实现Runnable接口方式:优点:线程类只是实现了Runable接口,还可以继承其他的类。在这种方式下,可以多个线程共享同一个目标(target)对象,所以非常适合多个相同线程来处理同一份资源的情况,从而可以将CPU代码和数据分开,形成清晰的模型,较好地体现了面向对象的思想。缺点:编程稍微复杂,如果需要访问当前线程,必须使用Thread.currentThread()方法。6.3.2创建和启动新线程在线程体中使用sleep()方法让线程进入休眠状态,sleep()方法的参数为一个毫秒数,是让当前线程休眠的时间,休眠时间结束,线程会重新进入竞争CPU的运行状态。在线程体中使用interrupt()方法中断线程。若要运行已经中断的线程可以使用start()重新启动。6.3.3子线程的休眠、中断通过上面的学习,我们已经知道了实现多线程的两种方法:一是通过继承Thread类来创建,二是通过向Thread类传递一个Runnable对象来实现。6.3.4建立线程类Timer是jdk中提供的一个定时器工具,使用的时候会在主线程之外起一个单独的线程执行指定的计划任务,可以指定执行一次或者反复执行多次。TimerTask是一个实现了Runnable接口的抽象类,代表一个可以被Timer执行的任务。要创建一个定时任务需要完成以下三个步骤:1.继承TimerTask类2.实现抽象方法run()方法3.将任务代码添加到run()方法体中代码示例如下: classmyTestextendsTimerTask{ publicvoidrun(){ System.out.println(“起床的时间到了…………”); } }6.4定时器Timerandroid的消息处理有三个核心类:Looper,Handler和Message。6.5Handler消息传递机制在使用Handler处理Message时,需要Looper(通道)来完成。在一个Activity中,系统会自动帮用户启动Looper对象,而在一个用户自定义的类中,则需要用户手工调用Looper类中的方法,然后才可以正常启动Looper对象。Looper的字面意思是“循环者”,它被设计用来使一个普通线程变成Looper线程。所谓Looper线程就是循环工作的线程。在程序开发中(尤其是GUI开发中),我们经常会需要一个线程不断循环,一旦有新任务则执行,执行完继续等待下一个任务,这就是Looper线程。6.5.1Looper简介Android在设计时引入了Handler消息机制,每一个消息发送到主线路的消息队列中,消息队列遵循先进先出原则,发送消息不会阻塞线程,而接收线程会阻塞线程。Handler允许发送并处理Message消息,Message对象通过主线程的MessageQueue消息队列相关联的Message和Runnable对象进行存取。每个Handler实例对Message消息发送和接收与对应主线程和主线程的消息队列有关。当创建一个新的Handler时,Handler就属于当前主线程,主线程MessageQueue消息队列也同步创建,即Handler会绑定到创建该Handler的主线程/消息队列上。然后,Handler就可以通过主线程的消息队列发送和接收Message消息对象了。6.5.2Handler简介

android.os.Message的主要功能是进行消息的封装,同时可以指定消息的操作形式。

在整个消息处理机制中,message又叫task,封装了任务携带的信息和处理该任务的handler。message的用法比较简单,但是有这么几点需要注意:1.尽管Message有public的默认构造方法,但是你应该通过Message.obtain()来从消息池中获得空消息对象,以节省资源。2.如果你的message只需要携带简单的int信息,请优先使用Message.arg1和Message.arg2来传递信息,这比用Bundle更省内存。3.擅用message.what来标识信息,以便用不同方式处理message。6.5.3Message简介利用HandlerMessageRunnable实现页面温度、湿度实时更新,利用timerHandlerMessage实现光照实时更新。6.6案例实现【案例分析】1.创建一个空白安卓程序。2.把动态库复制到项目中。3.编写String.xml文件。4.编写UI布局xml文件。设计出符合要求UI界面。5.编写后台代码,实现程序功能。6.对动态库对象进行声明,初始化。7.使用动态库对象更新温度、湿度和光照信息。8.程序退出时销毁动态库对象。6.6案例实现Java线程是Java语言中一个非常重要的组成部分,在Java5.0之前,多线程的语言支持还比较弱,写一个多线程的负责程序是相当有挑战性的。在Java5.0之后,Java对多线程做了很多扩展,这部分内容大大

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论