陈济海 张玉柱 胡自健
摘要:基于Android开发平台,设计出一款针对深圳报业集团新闻业务的互动手机客户端。该客户端主要拥有新闻阅读、 热门新闻评论、 新闻爆料、 用户注册分享等功能。客户端采用多线程异步加载服务器数据,达到优化客户端响应速度的目的。同时客户端采用可扩展标记语言(extensible markup language, XML)重写Android部分控件构建用户界面,具有良好的用户体验性。
关键词: Android;多线程;新闻客户端;Android控件重写
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2014)17-4016-04
近年来,随着移动互联网技术的快速发展,智能手机、平板电脑等移动智能终端越来越得到普及。2007 年底,Google发布了一个开放的智能移动设备设计的软件平台 Android[1]。截至2013年,Android份额进一步扩大至74.5%。人们已经养成了通过智能终端上网浏览新闻、微信交友、网上购物等习惯。传统报刊出版社、纸质杂志更新信息慢,实时性差,缺乏互动性。该文介绍了一款针对报业集团设计的全媒体互动手机客户端。该应用的特点是能将深圳报业集团旗下各种报刊杂志的热点新闻,财经新闻,科技新闻等,按照用户的喜好聚合到一起,供用户阅读。用户可以对感兴趣的新闻收藏评论分享,还能爆料身边的新闻,参与到新闻的采编过程中。
1 研究基础
1.1 Android开发平台架构研究
Android操作系统是由Linux2.6操作系统、中间件以及核心应用程序组成。Android应用程序一般是由Java语言来编写,现在也支持C++等其他语言[2]。Android操作系统的体系架构主要分为应用程序层、应用程序框架层、Android核心类库、Linux内核层4部分。其中Android核心类库层还包括Android运行时环境。本软件在最上层应用程序层开发,主要是调用应用程序框架层的类库。
1.2 HTTP协议介绍
通信协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,HTTP协议是通信协议中的一种。HTTP协议的全称是Hyper Text Transfer Protocol(超文本传输协议)。HTTP是一个应用层协议,由请求和响应构成,是一个标准的客户端服务器模型。客户端向服务器发送HTTP请求,HTTP请求由三部分组成:请求行(Request line)、请求头(Request header)、请求体(Request body)[3]。服务器接到请求后生成相应的响应,然后发送给客户端。HTTP响应也有三部分构成:状态行(Response line),消息报头(Response header)、响应正文(Response body)。
1.3自定义控件开发
Android系统提供了各种各样的控件供开发使用,但在实际的开发中,系统提供的控件有时候不能满足需求,这时就需要自定义一个控件。 自定义控件的实现方式主要分三种:继承已有的控件来实现自定义控件,继承自定义的一个XML[4]布局文件,通过inflater加载到界面中,继承view类来实现自定义控件,这种方式定义的控件属性更加灵活。
2 软件架构
Android 互动手机客户端主要分为4个子模块: 数据显示模块,数据处理模块,自定义控件模块,工具类模块。数据显示模块由若干个Activity构成,分别分为新闻浏览、图片新闻、用户信息、发现爆料、设置。数据处理模块负责和Web服务器接口通信,下载上传数据,解析Json数据。自定义控件模块主要是自定义的一些控件。工具类模块主要提供一些工具类,例如时间显示,第三方分享等。系统架构如图1 所示。
3 主要关键技术
3.1 Android四大组件,主框架实现
由于Android应用程序没有统一的应用程序入口(例如C语言的main方法),Google为Android应用程序设计了四大组件,根据各个组件完成的功能不同分为:Activity、Service、Broadcast Receiver、Content Provider。开发者通过这四大组件完成一个Android应用程序的设计。Activity是Android组件中最基础最常用的一种组件。对于一个Android应用程序来说通常由多个activities组成,Activity可以看成一个单独的屏幕[5]。应用程序中的一个activity被指定为"main"activity,当第一次启动应用程序的时候呈现给用户的那个activity。然后每一个activity可以启动另一个activity。一个activity启动,前一个activity就停止了,但是这个停止的activity仍然保存Activity栈上。当需要启动这个activity时,它被推送到栈顶。本软件主要由TabNewsActivity,TabUserActivity,TabMoodActivity,TabFindActivity ,TabSettingActivity构成。Service是一个没有用户界面的,长期在后台一直运行的组件。Service一般分为两种:Local Service (本地服务),Remote Service (远程服务)。Local Service Local Service 用于应用程序内部。Remote Service 用于android系统内部的应用程序之间。可以定义接口并把接口暴露出来,以便其他应用进行操作。Broadcast Receiver是用来接收广播通知信息,并做出对应处理的组件。Content Provider主要是用来存储和读取数据,应用程序之间通过Content Provider来访问数据。4大基本组件都需要AndroidManifest文件中进行配置才能使用。配置代码如下:
3.2从 web服务器下载上传数据
程序运行的流畅性是十分重要的。如果主线程处理的事件耗时过长将会出现ANR(应用程序无响应)导致程序崩溃。由于数据下载的速度取决于很多的因素,所以就有必要将耗时较多的数据下载事件交给后台线程处理,从而来提升用户体验,改善应用程序性能。本客户端中的数据是通过 Apache提供的HttpClient类来进行实现,将获得服务器端的数据,放在StringBuilder类型中。数据的处理过程如下图所示。
3.3 JSON数据的解析
JSON即JavaScript Object Natation, 它是一种轻量级的数据交换格式, 与XML一样, 是广泛被采用的客户端和服务端交互的解决方案[6]。JSON建构于两种结构:对象(object)和数组(array)。JSON用"名称 / 值对"来表示这两种结构。下面是一个简单的JSON数据:{"total":2,"success":true,"arrayData":[{"id":2,"name":"小猫"}]}。JSONObject得到Json数据中的对象,JSONArray得到Json数据中的数组。下面是解析JSON的关键代码:
JSONArray jsonArray = jsonObject.getJSONArray("hd_list");
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject2 = jsonArray.getJSONObject(i);
int id = jsonObject2.getInt("id");
String titlepic = jsonObject2.getString("titlepic");
解析出来的数据封装成ArrayList数据结构。
3.4 数据的适配
在Android系统中,数据不能直接呈现在一些界面上,必须通过适配器(Adaper)完成。适配器可以说是数据和界面直接的桥梁。在常见的列表视图控件(ListView)、缩略图浏览器控件(Gallery)、网格控件(GridView)、下拉列表控件(Spinner,以及其他的继承此类控件的自定义控件等,都需要适配器来进行数据的适配操作。常用的适配器有BaseAdapter,SimpleAdapter,ArrayAdapter,SimpleCursorAdapter,其中BaseAdapter是一个抽象类,具有较高的灵活性。我们一般继承BaseAdapter这类适配器,封装成适合界面的需求。BaseAdapter这个类中最重要的是getView()方法,用这个方法吧数据呈现在界面上。下面是个数据适配器的关键代码:
public View getView(int position, View convertView, ViewGroup parent) {
ListItemView listItemView = null;
if (convertView == null) {
convertView = listContainer.inflate(this.itemViewResource, null);
listItemView = new ListItemView();
listItemView.title = (TextView)convertView.findViewById(R.id.news_listitem_title);
listItemView.date= (TextView)convertView.findViewById(R.id.news_listitem_date);
listItemView.flag= (ImageView)convertView.findViewById(R.id.news_listitem_flag);
convertView.setTag(listItemView);
}else {
listItemView = (ListItemView)convertView.getTag();
}
Map map = listItems.get(position);
listItemView.title.setText(map.get("title").toString());
listItemView.title.setTag(map);
listItemView.date.setText(StringUtils.friendly_time(map.get("date").toString()));
return convertView;
4 功能实现
在如上所述的环境、 设计和开发规程步骤情况下实现了生活即时助手, 其功能描述如下所述。
1)通过对服务器数据的下载、解析、适配最终显示在UI界面上,实现新闻阅读功能。在软件中使用自定义控件,实现新闻按栏目类别进行分类,如:社会、军事、体育、娱乐等。用户还可以根据需要喜好,自定义管理新闻栏目,如图3所示。endprint
2)用户注册账号后,可享受相关特权。用户可以通过浏览评论新闻、浏览广告、注册新用户、推荐用户使用本软件等获取虚拟币。可以通过虚拟币在商城里兑换奖品,参加抽奖活动获得大奖等。软件还支持第三方登录,利用OAuth协议实现第三方安全登录,不会泄露用户信息,如图4所示。
3)将用户的配置信息存在本地,可以实现在下一次开机时快速获得用户使用该软件订阅的报业集团旗下各种报刊杂志。程序通过HTTP协议向服务器上传数据,可以实现用户爆料新闻,如图5所示。
4)PreferenceActivity是Android中专门用来实现程序设置界面和参数存储的一个Activity,我们只要继承PreferenceActivity实现一个设置界面类,用户就可以在设置是否加载图片、清除缓存等人性化设置,如图6所示。
5 结论
Android系统目前作为移动智能终端最主流的系统,各行各业都在推出基于Android平台的应用。该文为深圳报业集团设计了一款基于Android平台的互动手机客户端。这个系统能帮助企业在移动互联网时代赢得用户,跟上时代步伐。文中数据处理模块的开发思路对其它Android应用有一定参考价值。图片缓存的处理和多媒体播放是本软件需要进一步优化的地方。
参考文献:
[1] Margaret Butler. Android: Changing the Mobile Landscape[J]. Pervasive Computing, IEEE, 2011,10(1).
[2] 郭宏志. Android应用开发详解[M].北京:电子工业出版社,2010.
[3] 马永亮. 基于Android手机平台的好友通讯系统的设计与实现[D]. 北京:北京邮电大学,2012.
[4] 曾春平,王超,张鹏. XML编程从入门到精通[M]. 北京:北京希望电子出版社2002.
[5] Activity [EB/OL].http://developer.android.com/guide/components/activities.html.
[6] Introducing JSON [EB/OL] http://www.json.org/index.html.endprint
2)用户注册账号后,可享受相关特权。用户可以通过浏览评论新闻、浏览广告、注册新用户、推荐用户使用本软件等获取虚拟币。可以通过虚拟币在商城里兑换奖品,参加抽奖活动获得大奖等。软件还支持第三方登录,利用OAuth协议实现第三方安全登录,不会泄露用户信息,如图4所示。
3)将用户的配置信息存在本地,可以实现在下一次开机时快速获得用户使用该软件订阅的报业集团旗下各种报刊杂志。程序通过HTTP协议向服务器上传数据,可以实现用户爆料新闻,如图5所示。
4)PreferenceActivity是Android中专门用来实现程序设置界面和参数存储的一个Activity,我们只要继承PreferenceActivity实现一个设置界面类,用户就可以在设置是否加载图片、清除缓存等人性化设置,如图6所示。
5 结论
Android系统目前作为移动智能终端最主流的系统,各行各业都在推出基于Android平台的应用。该文为深圳报业集团设计了一款基于Android平台的互动手机客户端。这个系统能帮助企业在移动互联网时代赢得用户,跟上时代步伐。文中数据处理模块的开发思路对其它Android应用有一定参考价值。图片缓存的处理和多媒体播放是本软件需要进一步优化的地方。
参考文献:
[1] Margaret Butler. Android: Changing the Mobile Landscape[J]. Pervasive Computing, IEEE, 2011,10(1).
[2] 郭宏志. Android应用开发详解[M].北京:电子工业出版社,2010.
[3] 马永亮. 基于Android手机平台的好友通讯系统的设计与实现[D]. 北京:北京邮电大学,2012.
[4] 曾春平,王超,张鹏. XML编程从入门到精通[M]. 北京:北京希望电子出版社2002.
[5] Activity [EB/OL].http://developer.android.com/guide/components/activities.html.
[6] Introducing JSON [EB/OL] http://www.json.org/index.html.endprint
2)用户注册账号后,可享受相关特权。用户可以通过浏览评论新闻、浏览广告、注册新用户、推荐用户使用本软件等获取虚拟币。可以通过虚拟币在商城里兑换奖品,参加抽奖活动获得大奖等。软件还支持第三方登录,利用OAuth协议实现第三方安全登录,不会泄露用户信息,如图4所示。
3)将用户的配置信息存在本地,可以实现在下一次开机时快速获得用户使用该软件订阅的报业集团旗下各种报刊杂志。程序通过HTTP协议向服务器上传数据,可以实现用户爆料新闻,如图5所示。
4)PreferenceActivity是Android中专门用来实现程序设置界面和参数存储的一个Activity,我们只要继承PreferenceActivity实现一个设置界面类,用户就可以在设置是否加载图片、清除缓存等人性化设置,如图6所示。
5 结论
Android系统目前作为移动智能终端最主流的系统,各行各业都在推出基于Android平台的应用。该文为深圳报业集团设计了一款基于Android平台的互动手机客户端。这个系统能帮助企业在移动互联网时代赢得用户,跟上时代步伐。文中数据处理模块的开发思路对其它Android应用有一定参考价值。图片缓存的处理和多媒体播放是本软件需要进一步优化的地方。
参考文献:
[1] Margaret Butler. Android: Changing the Mobile Landscape[J]. Pervasive Computing, IEEE, 2011,10(1).
[2] 郭宏志. Android应用开发详解[M].北京:电子工业出版社,2010.
[3] 马永亮. 基于Android手机平台的好友通讯系统的设计与实现[D]. 北京:北京邮电大学,2012.
[4] 曾春平,王超,张鹏. XML编程从入门到精通[M]. 北京:北京希望电子出版社2002.
[5] Activity [EB/OL].http://developer.android.com/guide/components/activities.html.
[6] Introducing JSON [EB/OL] http://www.json.org/index.html.endprint