资料介绍
移动护理系统开发采用异步处理的方式,可以缩短执行操作的时间,避免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()方法获取的病人列表来加载页面控件,完成后关闭对话框。至此,异步任务处理整个过程结束。
任务分析
移动护理开发初期,对一些比较耗时的操作,我们没有考虑异步任务处理的方式,造成程序假死的问题,用户执行某个操作后十几秒程序才有反应,严重影响用户体验。现在程序已支持异步任务处理,本文将简单介绍移动护理中异步任务处理方式。
移动护理系统通过访问网络获取数据,在获取数据过程中,访问网络和解析大量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()方法获取的病人列表来加载页面控件,完成后关闭对话框。至此,异步任务处理整个过程结束。
下载该资料的人也在下载
下载该资料的人还在阅读
更多 >
- PCB电镀中异常处理方式 0次下载
- 电子电路故障原因和处理方式资料下载
- 如何搭建移动物联网Android的开发环境 1次下载
- 【经验分享】系统常用 (电磁兼容)EMC处理方式 35次下载
- 基于Android系统自启动程序设计 5次下载
- 基于Android图像处理系统研究及开发 1次下载
- ANDROID开发应用程序的方法和技巧 7次下载
- 《Android基础及典型案例开发指南》--创新移动开发系列 11次下载
- Android程序设计基础 郝玉龙_部分6 0次下载
- Android程序设计基础 郝玉龙_部分5 0次下载
- Android程序设计基础 郝玉龙_部分2 0次下载
- Android程序设计基础 郝玉龙_部分4 0次下载
- Android程序设计基础 郝玉龙_部分1 0次下载
- Android程序设计基础 郝玉龙_部分3 0次下载
- Android开发宝典之Android程序员入门 546次下载
- 如何使用Tokio 和 Tracing模块构建异步的网络应用程序 542次阅读
- Flutter异步编程指南 487次阅读
- buildroot对/dev的四种处理方式 910次阅读
- 网络丢包怎么办,常见故障分析及处理方式 1.8w次阅读
- 适合移动应用开发的编程语言有哪些 4455次阅读
- 海天雄电子:Android移动互联网实验室开发架构 3160次阅读
- 使用android通过USB调试真机程序 1907次阅读
- Android 异步通信原理机制-- handler 1947次阅读
- 未来医疗护理诊断监控体系和全新的医疗诊断护理体系 1326次阅读
- SH-3异常中断处理方式 SH7709S的应用 1187次阅读
- 简单分析GPU与CPU在绘图处理方式的优缺点 1w次阅读
- 介绍学习一种模拟信号的处理方式:对数处理 1w次阅读
- 手机能不能支持ipv6_介绍Android手机的ipv6功能 7.4w次阅读
- android开发常用词汇 4795次阅读
- 基于Android的低功耗移动心电监控系统的设计方案 2723次阅读
下载排行
本周
- 1TC358743XBG评估板参考手册
- 1.36 MB | 330次下载 | 免费
- 2开关电源基础知识
- 5.73 MB | 6次下载 | 免费
- 3100W短波放大电路图
- 0.05 MB | 4次下载 | 3 积分
- 4嵌入式linux-聊天程序设计
- 0.60 MB | 3次下载 | 免费
- 5基于FPGA的光纤通信系统的设计与实现
- 0.61 MB | 2次下载 | 免费
- 6基于FPGA的C8051F单片机开发板设计
- 0.70 MB | 2次下载 | 免费
- 751单片机窗帘控制器仿真程序
- 1.93 MB | 2次下载 | 免费
- 8基于51单片机的RGB调色灯程序仿真
- 0.86 MB | 2次下载 | 免费
本月
- 1OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 2555集成电路应用800例(新编版)
- 0.00 MB | 33564次下载 | 免费
- 3接口电路图大全
- 未知 | 30323次下载 | 免费
- 4开关电源设计实例指南
- 未知 | 21548次下载 | 免费
- 5电气工程师手册免费下载(新编第二版pdf电子书)
- 0.00 MB | 15349次下载 | 免费
- 6数字电路基础pdf(下载)
- 未知 | 13750次下载 | 免费
- 7电子制作实例集锦 下载
- 未知 | 8113次下载 | 免费
- 8《LED驱动电路设计》 温德尔著
- 0.00 MB | 6653次下载 | 免费
总榜
- 1matlab软件下载入口
- 未知 | 935054次下载 | 免费
- 2protel99se软件下载(可英文版转中文版)
- 78.1 MB | 537796次下载 | 免费
- 3MATLAB 7.1 下载 (含软件介绍)
- 未知 | 420026次下载 | 免费
- 4OrCAD10.5下载OrCAD10.5中文版软件
- 0.00 MB | 234315次下载 | 免费
- 5Altium DXP2002下载入口
- 未知 | 233046次下载 | 免费
- 6电路仿真软件multisim 10.0免费下载
- 340992 | 191185次下载 | 免费
- 7十天学会AVR单片机与C语言视频教程 下载
- 158M | 183278次下载 | 免费
- 8proe5.0野火版下载(中文版免费下载)
- 未知 | 138040次下载 | 免费
评论
查看更多