本站小编为你精心准备了移动平台大数据分批加载研究参考范文,愿这些范文能点燃您思维的火花,激发您的写作灵感。欢迎深入阅读并收藏。
《电脑编程技巧与维护杂志》2015年第六期
1涉及技术
(1)Handle-Message机制:即标准线程机制是采用创建线程方式处理异步问题,子线程与主线程通信采用消息机制实现。这种方式的优点是结构清晰、功能定义明确。在多线程合并操作对UI进行更新时更容易。Handle-Message机制主要由Handler-Message和Thread组成。Handler-Message由消息类Message、消息处理类Handler、消息队列类MessageQueue和队列线环Looper4部分组成,主要进行消息的发送和接收操作。其中消息类Message主要负责线程间通信的信息,如果处理完成后需要更新主线程界面,可以发送带有结果数据的Message给主线程;Handler:消息处理类,负责管理Message的发送和处理。使用Handler类中的obtainMessage方法获取子线程的Message,在sendMessage方法发送给UI线程进入消息队列MessageQueue。Message-Queue:消息队列,按照先进先出的执行顺序存放Message。Looper:线环,负责管理消息队列,功能是像流水线一样从消息队列中抽取消息,然后进行执行。Thread线程类,包含UI线程即主线程MainThread和WorkerThread子线程。其中WorkerThread主要负责处理耗时操作。主要过程如图1所示[1]。(2)Listview控件:是在移动平台上界面布局的数据显示容器[2]。ListView分批数据加载实现方法:调用ListView的se-tOnScrollListener方法对ListView滚动事件进行监听,主要监听onScrollStateChanged跟onScroll方法,其中onScrollState-Changed方法是ListView滚动状态变化执行的,分别会在用户开始拖动、用户拖动结束、拖动结束后由于惯性进行滚动这3种情况下调用,而onScroll方法是ListView每滚动一条记录就会执行一次。在onScroll方法内判断数据是否已经显示到当前结果集的最后一条记录,若是就使用异步机制继续到服务器加载列表数据,并把获得的数据加入结果集,最后在UI线程进行更新。(3)基本适配器BaseAdapter:是Android应用程序中常用到的基础数据适配器[3],它的主要用途是将一组数据传到像ListView、Spinner、Gallery及GridView等UI显示组件。例如可以自定义的BaseAdapter展示ListView;可以动态修改、刷新ListView内容;可以实现ListView内容的点击和长按点击事件;可以在getView方法中动态增加新组件。BaseAdapter继承接口类Adapter类,而Adapter、数据和ListView之间的关系如图2所示[4]。(4)JSON解析:从数据库中获取数据主要采用Android的JSON进行解析[4],包含的类有:JSONObject:是一个JSON对象,这是系统中有关JSON定义的基本单元。JSONArray:代表一组有序的数值。本模型主要采用JSON解析从服务器获取的数据信息。
2具体方案
具体方案步骤如下:(1)用户发出阅读请求。(2)Android客户端UI线程创建一个子线程(workerthread)。(3)由该子线程通过HttpClient向服务器发送获取健康报数据的请求,而不使用主线程执行操作,实现异步机制。(4)服务器接受到请求,调用service方法从数据库获取健康报数据,再对获取到的数据进行迭代,逐一解析成JSON对象(JSONObject)加入到JSON数组(JSONArray),最后将JSON数组以字符串形式返回Android客户端。(5)Android客户端接受到返回的JSON数组,对数组进行迭代,逐一解析成健康报对象,加入List集合。(6)对主线程进行更新,主要通过handler对象的obtain-Message方法获得一个消息Message,这个消息Message附带的数据是解析后获得List集合。再通过handler的sendMessage方法发送给UI线程。创建一个继承BaseAdapter(基础适配器)的HealthnewspaperAdapter类,将获得子线程发来的健康报集合,绑定到HealthnewspaperAdapter对象中,最后显示在ListView对象。(7)调用ListView的setOnScrollListener方法对ListView滚动事件进行监听。如果发生ListView每滚动一条记录就会执行一次onScroll方法,判断数据是否已经显示到当前结果集的最后一条记录,若是就使用异步机制继续重复步骤(1)向服务器请求加载数据,并把获得的数据加入结果集,最后在UI线程进行更新,从而实现分批加载。整个流程如图3所示。
3方案实施结果
目前老人手机的日益普及,针对老人健康管理应用设计也在日益完善。其中针对老人进行定期进行健康报传送,让老人能够及时了解各种健康养生的办法。健康报中数据量很多而且包含文字信息和图片信息,其中健康报的列表就可以包含了上百条甚至上千条的内容(例如一个月的内容和一年的内容)。所以在进行数据传送时采用异步机制的大数据分批传送模式。开发环境包括:Android4.3版本,移动端的Eclipse开发平台,服务器端采用的MyEclipse开发平台和oracle数据库。其中移动平台为手机端,老年人通过手机进行阅读手机报,而服务器端主要提供网页Web浏览和后台数据库的管理,手机报的更新通过服务器端进行管理并实现网络访问浏览。手机健康报数据均保存在后台数据库中。健康报数据传输具体的顺序图如图4所示。其过程即为描述的具体方案步骤,其中UIthread即为主线程,workerthread为子线程。这两线程为Android端操作步骤。而Webaction和WebserviceWebDao为服务器端,作为对手机端的通信桥梁和数据库的通信桥梁。一般老人手机屏幕一页因为字体较大所以一般为6-7条记录,而如果超过6-7条记录时,没必要全部进行传输显示,可以采用传输模式进行数据分批显示,如图5(a)所示,这样确保页面上的6-7条记录能够传输保存在手机内存中。而所加载的列表信息内容包含文字和图片,显示内容如图5(b)所示。采用服务器端对后台数据库中健康报信息进行更新,如图6所示。
4结语
主要对移动平台下大数据传输进行优化,主要采用Han-dle-Message异步机制的方式结合BaseAdapter、ListView控件对大数据分批加载,数据传输终端采用JSON技术对传输数据进行解析。设计一个老人健康管理平台,包含移动平台和Web服务器平台两部分,其中关于健康报的传输采用了传输方案通过分析和实现,通过运行,系统数据加载流程,健康报的图文和文字信息加载正常而且流畅,手机端无卡壳死机现象出现,结果良好。后期对数据加载中涉及的缓存做进一步的优化。
作者:许雪林陈敏陈建峰单位:福建工程学院信息科学与工程学院