当前位置:首页 > 嵌入式 > 嵌入式软件
[导读]移动护理系统开发采用异步处理的方式,可以缩短执行操作的时间,避免UI线程阻塞。笔者介绍了采用异步处理方式开发移动护理程序的方法,并以移动护理中的病人列表异步任务处理为例进行分析。

移动护理系统开发采用异步处理的方式,可以缩短执行操作的时间,避免UI线程阻塞。笔者介绍了采用异步处理方式开发移动护理程序的方法,并以移动护理中的病人列表异步任务处理为例进行分析。

任务分析

移动护理开发初期,对一些比较耗时的操作,我们没有考虑异步任务处理的方式,造成程序假死的问题,用户执行某个操作后十几秒程序才有反应,严重影响用户体验。现在程序已支持异步任务处理,本文将简单介绍移动护理中异步任务处理方式。

移动护理系统通过访问网络获取数据,在获取数据过程中,访问网络和解析大量XML数据是不可避免的,这个过程需要耗费较长的时间,在我们未采用异步任务处理之前,执行一个操作需要等待5-10秒甚至更长的时间,这样程序就得等待很久才能正常操作。一般情况下,网络连接、XML解析、数据库访问都会造成这种长时间等待。

原因很简单,当一个程序第一次启动时,Android会同时启动一个对应的主线程,主线程主要负责处理与UI相关的事件,如:用户的按键事件、用户触摸屏幕的事件等,并把相关的时间分发到对应的组件进行处理,这个主线程也叫UI线程。我们之前的方式就是使用UI线程完成所有操作,包括UI事件处理、网络连接、解析XML,这样就会造成UI阻塞,表现为程序假死的现象。

为了解决程序假死的问题,我们必须使用异步任务处理,以确保在UI线程只处理UI事件,避免UI线程阻塞。

解决方案

Android 1.5已经提供了一个工具类——AsyncTask,使用AsyncTask可以是创建需要与用户界面交互的长时间运行的任务变得更简单,所以我们使用它来处理网络访问、XML解析这两个耗时操作来避免移动护理程序假死的问题。

AsyncTask 是一个抽象类,他提供了三个泛型参数,详细如下

AsyncTask的三个泛型参数

1.Param 任务执行需要的参数

2.Progress 后台任务执行的进度单位数据

3.Result 后台任务执行最终返回的数据类型

注意:在设置参数时通畅是:String …params,这表示方法可以有0个或多个String类型的参数;不使用参数时可设置为 Void…

使用AsyncTask类,必须重载AsyncTask的四个方法(至少重载一个)。详细如下:

AsyncTask的四个方法

1.onPreExecute() 这个方法主要用于执行一些预处理操作,它运行于UI线程,一般用来为后台任务做一些准备工作,如在界面上显示一个进度条。

2.doInBackground() 这个方法运行在后台线程中,主要负责执行那些很耗时的操作,如移动护理系统中的网络连接、解析XML等操作。这个方法在onPreExecute()方法后执行,该方法是抽象方法,也是AsyncTask的关键,所以该方法必须重载。另外,在这个方法中可以使用 publishProgress(Progress…)来改变当前的进度值。

3.doProgressUpdate(Progress…) 这个方法运行于UI线程。如果在doInBackground(Params…)中使用了publishProgress(Progress…),UI线程就会调用这个方法对进度条控件的进度值进行控制。


4.onPostExecute(Result) 这个方法也运行于UI线程,在doInBackground(Params…)方法执行后调用,该方法用于处理后台任务执行后返回的结果。

实例解析

以移动护理中的病人列表异步任务处理为例:

@Override

protected void onPreExecute() {

super.onPreExecute();

// 获取Wifi网络连接状态

isNetWorkConnected = NetWorkActivity

.isNetworkAvailable(PatiListActivity.this);

if (isNetWorkConnected)

// 弹出提示对话框

mDialog.show();

}

onPreExecute()方法主要用于检查网络连接是否成功,如果成功则弹出进度条对话框。该方法运行于UI线程。

@Override

protected Object doInBackground(Object... arg0) {

if (isNetWorkConnected) {

// 获取病人列表数据

patientList = getPatiList();

}

return null;

}

doInBackground()方法主要进行网络访问和XML解析,以获取病人列表数据,它运行于后台线程。这里没有调用 publishProgress() 方法,因为我们的进度条不需要显示百分比,因此我们也没必要重载doProgressUpdate(Progress…)方法。

@Override

protected void onPostExecute(Object result) {

super.onPostExecute(result);

if (isNetWorkConnected) {

try {

// 加载页面控件

drawPage();

// 关闭提示对话框

mDialog.dismiss();

} catch (Exception e) {

e.printStackTrace();

Toast.makeText(PatiListActivity.this, errorMsg,

Toast.LENGTH_SHORT).show();

}

}

}

OnPostExecute()运行于UI线程,通过doInBackgroud()方法获取的病人列表来加载页面控件,完成后关闭对话框。至此,异步任务处理整个过程结束。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

罗德与施瓦茨与SmartViser携手开发了一种用于测试符合欧盟销售的智能手机和平板电脑的新Energy Efficiency Index(EEI)标签法规的解决方案。该解决方案的核心是R&S CMX500,这是...

关键字: 智能手机 Android iOS

(全球TMT2023年8月24日讯)2023年8月23日,时值实时3D引擎Unity在华设立合资公司Unity中国一周年之际,Unity中国正式推出Unity中国版引擎——团结引擎。Unity全球CEO John Ri...

关键字: UNITY CE Android 开发者

报告显示:全球电商 App 获客花费接近50亿美元 北京2023年8月23日 /美通社/ -- 全球营销衡量与体验管理平台 AppsFlyer 近日发布《2023 电商 App 营销现状报告》。尽管面临全球经...

关键字: APPS BSP iOS Android

数字机顶盒是一种数字技术下的多媒体娱乐中心,可以实现电视节目接收、播放、存储、网络应用等多种功能。随着科技的发展,数字机顶盒的设计方案也在不断进步和优化。本文将介绍数字机顶盒设计的几种实现方案。

关键字: 数字机顶盒 Android Linux

21ic 近日获悉,原小米 9 号创始员工李明在社交媒体平台公布了旗下首款产品乐天派桌面机器人,为全球首款 Android 桌面机器人,面向极客和发烧友的 AI + 机器人。据悉,李明两个月前宣布创业并进军 AI 领域,...

关键字: 小米 Android 桌面机器人 AI

尽管安装增长放缓,全球游戏 App 获客花费仍高达 267 亿美元 经济低迷导致 2023 游戏 App 营销优先考虑收入指标,用户增长次之 北京2023年3月9日 /美通社/ -- 今天,全球营销衡量与体验管理平台...

关键字: APPS iOS Android BSP

量子计算领域的新里程碑,来了! 谷歌科学家证明,通过增加量子比特的数量,就能降低量子计算的错误率。

关键字: 谷歌 Android Windows

「卫星通讯」正在被普及到每一台智能手机当中。普及的动机并非是消费市场的一个刚需,其实更像是将差异化的功能「抹平」成一个标配。时下,支持「卫星通讯」功能的智能手机只有苹果的 iPhone 14 系列与华为的 Mate 50...

关键字: 卫星通讯 Android 智能手机 iPhone

Android是Google开发的操作系统,支持多种指令集架构 (ISA),包括Arm和x86,多数使用Android的设备都采用Arm架构芯片组。新兴RISC-V架构是免费开放指令集架构,任何人都可用它设计芯片,且无需...

关键字: 谷歌 Android RISC-V架构

智能手机并非每年都取得重大进展,这导致越来越多的人将手机保留两年、三年或四年。不过,普通的 Android 手机能否在遇到问题之前使用那么久?

关键字: Android 安卓 谷歌 智能手机
关闭
关闭