版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Android物联网应用程序开发资源转化系统教材辽宁轻工职业学院辽宁轻工职业学院任务实现知识准备任务目标目录
辽宁轻工职业学院任务3农业大棚中的灯照控制项目6界面数据更新的实现辽宁轻工职业学院本项目在项目1和项目2的基础上继续添加灯照开关的功能。在智能农业灯光控制系统中列出了温室照明灯和加温灯两种灯的实例。在此实例中将详解照明灯依据光照传感器获取的值,实现自动开关的功能。在案例程序中已经设定了每500ms采集一次光照传感器的值,然后自动控制界面中灯的开关显示辽宁轻工职业学院【任务目标】1.掌握异步线程的应用2.掌握使用runOnUiThread方法实现更新UI界面的方法1.异步线程简介辽宁轻工职业学院【知识准备】线程的开销较大,如果每个任务都要创建一个线程,那么应用程序的效率要低很多;线程无法管理,匿名线程创建并启动后就不受程序的控制了,如果有很多个请求发送,那么就会启动非常多的线程,系统将不堪重负。另外,前面已经看到,在新线程中更新UI还必须要引入handler,这让代码看上去非常臃肿。在Android中,提供了AsyncTask。它使创建需要与用户界面交互的长时间运行的任务变得更简单。AsyncTask定义了三种泛型类型Params,Progress和Result。•Params启动任务执行的输入参数,比如HTTP请求的URL。•Progress后台任务执行的百分比。•Result后台执行任务最终返回的结果,比如String。1.异步线程简介辽宁轻工职业学院【知识准备】AsyncTask的执行分为四个步骤1)onPreExecute(),该方法将在执行实际的后台操作前被UIthread调用。可以在该方法中做一些准备工作,如在界面上显示一个进度条。2)doInBackground(Params...),将在onPreExecute方法执行后马上执行,该方法运行在后台线程中。这里将主要负责执行那些很耗时的后台计算工作。可以调用publishProgress方法来更新实时的任务进度。该方法是抽象方法,子类必须实现。3)onProgressUpdate(Progress...),在publishProgress方法被调用后,UIthread将调用这个方法从而在界面上展示任务的进展情况,例如通过一个进度条进行展示。4)onPostExecute(Result),在doInBackground执行完成后,onPostExecute方法将被UIthread调用,后台的计算结果将通过该方法传递到UIthread。1.异步线程简介辽宁轻工职业学院【知识准备】使用AsyncTask类,以下是几条必须遵守的准则:
1)Task的实例必须在UIthread中创建
2)execute方法必须在UIthread中调用
3)不要手动的调用onPreExecute(),onPostExecute(Result)doInBackground(Params...),onProgressUpdate(Progress...)这几个方法4)该task只能被执行一次,否则多次调用时将会出现异常1.异步线程简介辽宁轻工职业学院【知识准备】在Android开发过程中,常需要更新界面的UI。而更新UI是要主线程来更新的,即UI线程更新。如果在主线线程之外的线程中直接更新页面显示常会报错并抛出异常。利用Activity.runOnUiThread(Runnable)把更新ui的代码创建在Runnable中,然后在需要更新ui时,把这个Runnable对象传给Activity.runOnUiThread(Runnable)。这样Runnable对像就能在ui程序中被调用。如果当前线程是UI线程,那么行动是立即执行。如果当前线程不是UI线程,操作是发布到事件队列的UI线程,代码如下:1.异步线程简介辽宁轻工职业学院【知识准备】FusionField.currentActivity.runOnUiThread(newRunnable(){publicvoidrun(){Toast.makeText(getApplicationContext(),,"UpdateMyUI",Toast.LENGTH_LONG).show();}});辽宁轻工职业学院【任务实现】
1.在Eclipse下创建一个Android项目,命名为AndroidDemo6_3,将项目2任务3的布局文件导入到本项目中。2.在src/com.example.androiddemo6_1包中,新建一个类BasePort.java,用于打开Zigbee的四个输入串口,定义openZigBeePort方法,打开ZigBee的端口。3.新建closeZigBeePort()方法用于四个输入串口的关闭。4.在src/com.example.androiddemo6_3包中,再新建一个类FourInput.java继承自BasePort.java类,定义三个整型的变量ISTEMP、ISHUMI、ISLIGHT分别代表温度、湿度和光照感应,初始值均为“--”;定义mFourInput_fd变量初始值为0。辽宁轻工职业学院【任务实现】5.在重写的FourInput()方法中,将打开四个端口获得的温度、湿度和波特率的值赋给变量6.在重写的start方法中,创建ZigBeeService的对象,并对其进行实例化,且开启服务。利用ZigBeeAnalogServiceAPI的getTemperature方法更新温度信息7.同样的方法获取湿度的值8.同样的方法获取光照的值9.在MainActivity.java中自定义initView()方法完成控件初始化,打开串口,添加一个Timer对象可以让将要执行的线程定时执行。
具体主要的代码请参考书籍中的代码。辽宁轻工职业学院【任务实现】提示:在开发中我们有时会有这样的需求,即在固定的每隔一段时间执行某一个任务。比如UI上的控件需要随着时间改变,我们可以使用Java为我们提供的计时器的工具类,即Timer和TimerTask。。本章小结辽宁轻工职业学院【任务实现】本章内容主要介绍了在Android系统平台上多线程编程技术,尤为突出的是新线程可以采用多种方式更行主线程(界面线程)的UI控件属性
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论