康莅宸+商广宇+郝志宏
[摘 要]随着社会的不断进步,大量信息已经使得用户阅读量过载,无法合理有效率地快速获取自己关注的感兴趣的知识。但是通过RSS Feed所提供的一系列功能,可以使用RSS阅读器订阅自己感兴趣的信息并同时进行管理,屏蔽掉不想阅读的信息,而不会使自己淹没在各种大量没兴趣的信息中。文章在开始部分先介绍了Android的基本知识和开发流程,在后续部分重点介绍了在研发过程中的准备工作以及遇到的一些问题。首先根据目前豌豆荚、应用宝等相关的App下载平台的统计数据,通过数据对比决定使用SAX解析作为解析RSS源的算法。
[关键词]安卓应用;新闻阅读器;RSS解析;SAX算法
[DOI]10.13939/j.cnki.zgsc.2018.02.173
1 引 言
1.1 研究的意义
RSS技术可以让阅读者有一个高效管理信息的阅读模式,能够快速准确地找到自己想要的信息。也可以给信息提供服务商一个安全、成本较低且十分高效的发布信息的相关渠道。
1.2 课题研究方法及其内容
通过了解这个基于Android平台的RSS阅读器来了解开发流程和提升自己对计算机学科的兴趣。
具体来讲:第一,从实用性和简约的角度来进行UI设计,熟悉Android应用程序开发的UI设计过程。第二,经过比较的选择,选择合适的算法来读取RSS源的内容。第三,经过对功能点的统计和设计,来明白怎样更好地提高用户体验,增加程序的实用性。第四,对App进行系统的测试,确保能够正常使用。
2 关键技术分析
2.1 Android平台
Android是一种以Linux为基础的开源代码操作系统。由Google持续领导和开发中。Android平台是基于在Linux内核以上的开发工具,所以保证了很大程度的内容的多样性和可移植性。Android平台已经为开发应用程序的过程当中提供了一套很好很实用的框架,笔者可以在这个平台上开发出不同的适应需求的应用程序。[1]
2.1.1 Android特征
Dalvik虚拟:Android采用的是自主开发的Dalvik虚拟机技术,所占用的资源比例虽然小,但运行效率却是相当快的。
集成浏览器:基于WebKit引擎的开源。
优化的图形:Android使用的是自定义二维图形库。
SQLite数据库:SQLitet提供结构化的数据存储。
多媒体支持:支持如MP3、JPG、PNG等多种音视频和图像格式。
强大的开发环境:Android应用程序开发环境只需要大家常用的Eclipse、设备模拟器以及Eclipse IDE的开发插件 [2]。
2.1.2 Android架构
Android的系统架构从上到下分别是应用程序层、应用程序框架层、系统运行库层、Linux核心层。
Android平台内已经存在了如发短信、日历和接打电话等程序。我们可以在这个平台上编写出更多自己想要开发的程序。开发语言主要为Java,当然,我们也可以利用其他语言编码。
Android应用程序的开发是基于框架和组件。Android框架本身已经为我们提供了很多的实用的组件来供使用,但我们也可以根据自身需求来编写新的组件,供自己的程序来进行调用,十分方便。
Android系统平台是优化了的Linux内核。比如可靠的安全性、进程管理、内存管理等都是依赖Linux内核。
2.1.3 Android应用的构成和工作机制
对于一个Android应用程序来说,是由Activity(活动)、 Intent Receiver(目的接收方)、Service(服务)、Content Provider(内容提供者)四部分组成。在Android程序中有一个很重要的配置文件:androidMainfest.xml。笔者需要在这个文件中定义需要使用的组件和它的功能。
Activity是应用程序中最基本也是最重要的构造块,一个屏幕就是一个Activity。每个Activity都是继承自Activity基类的独立的类。我们使用setContentView(View)方法来展示我们已经定义好了的界面。
(1)活动生命周期
Activity(活动)有三个很关键的循环。
第一,活动的整个生命期:系统启动Activity会先调用onCreate(Bundle),最后以调用onDestroyO结束。系统使用onCreate()实现初始化。调用onDestroyO结束工作,同时释放所占有的空间。
第二,活动的可见生命期:系统的Activity从调用onStart()开始,然后到onStop()停止。在此期间,Activity是通過显示在屏幕上与用户交互。即使用户不进行交互也可以在屏幕上显示。
第三,活动的后台生命期:从调用onResume()开始,到调用onPause()结束。当用户切出当前屏幕调用onPause(),切回来时调用onResume()。我们可以多次调用这两个方法,来实现活动在resumed和pasued之间的转换[3]。
(2)活动之间的切换
在Android开发中一般使用Intent类实现Activity之间的相互跳转。Intent是一种运行时绑定机制,能够在应用的运行过程中连接两个不同的组件。因此Intent起一个中介作用,用来连接调用和被调用者两者之间的联系。
Service是运行于应用程序后台没有界面的程序。它拥有一个较长的生命周期。这个服务在用户进行其他操作的时候,一直运行在后台,直到用户停止该服务或者服务运行结束。现在的一些媒体播放器就是利用这个方法实现的,可以让用户在听音乐的同时尽心愉快地聊天。endprint
2.2 Java
Java是1995年5月由SUN公司推出的一种可以编写跨平台应用软件的面向对象的程序设计语言。Java分为三个体系,J2SE、J2EE、J2ME。Java 因为其卓越的通用性、高效性、跨平台性和安全性,被普遍地应用于个人PC、移动电话和互联网等行业中。在全世界计算机行业飞速发展的氛围中,Java拥有明显的优势和广阔的发展前途。
Eclipse是一个开源的、以Java为基础的可扩展开发平台。它本身是一个框架和一组服务,我们使用它进行开发需要通过插件和组件来搭建我们的环境。Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)[3]。
2.3 SQLite数据库
SQLite是一款较低级别的数据库,是嵌入式的,需要很低的资源,其设备中,内存有几百K就足够用了。它可以使用在Windows/Linux /Unix等常见的操作系统中,同时还能支持大量编程语言,如 C#、C++、Java等,而相对于Mysql、PostgreSQL这两款数据库管理系统,它占有了很大的处理速度优势。
3 系统功能分析
3.1 界面设计
在主界面是用属状机构来实现用户管理新闻分类的,主要使用的是Expandable List View来实现的。并且为其他在应用中可能使用到的空间做了研究和准备,使开发过程中更顺利。在实现底部功能按钮的时候使用了GridView。使底部操作看上去十分简洁,操作上也简单便利了很多。
在显示新闻列表的界面使用了大家熟悉的简单的ListView来进行实现,可以把这个分类里面的新闻以一行一行的形式显示出来,整齐不杂乱。用户可以点击一条他感觉有兴趣的新闻进去,然后显示的是概要的浏览界面。
在新闻的概要界面使用TextView搭配Button来实现的。这样使得界面的简洁性得到保障,在功能使用的方便性方面也很好。
3.2 RSS解析
在Android平台上可以使用Simple API for XML(SAX)、Document Object Model(DOM)和Android附带的pull解析器解析XML文件。
3.2.1 使用SAX读取XML文件
我们的智能手机等移动设备相对于电脑来说内存较小,SAX解析占用内存小,速度快的特点很适用于我们的设备。SAX解析XML文件使用的方式是事件驱动,它并不是把整个完整的文档全部解析完,它使用的是内容顺序来解析需要解析的文档的进程,SAX自己能够判断当前遇到的字符是否符合XML中语法的某一个部分,如果满足这个条件我们就会触发调用事件。这里的事件指的是一些回调方法,他们定义在ContenHandler借口当中。
下面这些ContentHandler接口在开发过程中经常用到。
startDocument()在文档开头实收时进行调用,做些预处理的工作。
endDocument()和上面的方法相对应,做文档结束后的善后工作。
startElement()在遇到一个开始标签时,调用这个方法。
endElement()和上面的方法相对应,调用这个方法,是在遇到一个结束标签的时候。
characters(char[]ch,int start, int length)这个方法用来处理在XML文件中读到的内容,我们可以使用使用new String(ch,start,length)获取内容。
3.2.2 使用DOM读取XML文件
除了使用SAX可以解析XML文件外,也可以使用DOM来解析XML文件。二者不同的是,DOM进行解析XML文件时,是全部将XML文件都读取到内存中,使用DOM API来遍历XML树、找到所需数据。通过DOM对XML的内容的操作可以直观容易理解,在某些方面比SAX更加容易便捷。但是,因为DOM需要先将XML文件全部包含的内容读取到内存中,所以对 Android智能手机内存较小的智能设备来说,所付出的代价比较大。如果XML的文件内容比较小,采用DOM可能比SAX更容易一些。
3.3 数据存储
随着用户使用时间增长,大量的新闻分类以及众多的RSS源地址,为了实现更好的管理,以及存取数据的及时性,可以采用Android内嵌的SQLite数据库来解决这个问题,把数据存入了数据库,用户的每次交互动作就可以直接从已经保存好数据的数据库中直接读取了。
4 系统功能实现
4.1 主界面的设计
鉴于Android平台手机屏幕本身尺寸的限制,为了不让用户有凌乱的感觉,在主界面决定使用双层树状结构的ExpandableListView控件进行管理和显示,这样的话就解决了随着用户使用时间长,新闻分类增加不便于管理和选择的难题,使用左侧弹开式结构能够便于用户选取新闻频道。
4.2 新闻列表界面的设计
当我们点开一个新闻分类后我们的程序会进入展示这个分类所有新闻的列表界面,在这个界面上是以一行一行的形式来显示这个分类下的所有新闻信息,每一行显示的是这条新闻的标题和它的发布时间。这个界面使用的是ListView来实现的,这样使得看起来直接,没有被各种信息充斥的烦乱的感觉,在Android较小的屏幕上一次性地为用户展示更多的感兴趣的新闻资讯。
在这个列表中的每一行都对应了这个分类下的相关的新闻资讯,我们单击这一列就可以进入这条新闻的详细界面。这个界面中的列表可以上下滑动,因为每个分类的新闻信息有很多,鉴于手机屏幕尺寸的限制,不可能把数以千计的新闻全部都显示出来,可以通过下滑加载出下方隐藏的新闻资讯。这个功能很符合现在人們使用软件的习惯,便于使用。
4.3 新闻阅读界面的设计
在这个界面是来显示我们在列表界面单击了一条新闻资讯的大体意思,这个界面是使用TextView实现的,主要显示的是标题、发布时间和对新闻资讯的描述。
“返回”按钮实现了返回功能,当然也可以利用系统自带的返回功能键完成这个动作。
4.4 新闻列表的呈现
新闻列表呈现启动 Activity 是 MainActivity 类。Activity 的入口点是 onCreate 方法,NewsFragment 的用户界面包括一个 ListView。ListView中显示 RSSFeed 中的 RSSItem 列表。
参考文献:
[1]靳岩,姚尚朗.Android开发入门与实践 [M].北京:人民邮电出版社,2009:3-54.
[2]余志龙,陈昱勋.Android SDK开发范例大全 [M].北京:人民邮电出版社,2009:90-146.
[3]李钢.设计文脉在信息时代的表现特征 [J].辽东学院学报:自然科学版,2008(1):20-34.endprint