康蒞宸+商廣宇+郝志宏
[摘 要]隨著社會的不斷進步,大量信息已經(jīng)使得用戶閱讀量過載,無法合理有效率地快速獲取自己關(guān)注的感興趣的知識。但是通過RSS Feed所提供的一系列功能,可以使用RSS閱讀器訂閱自己感興趣的信息并同時進行管理,屏蔽掉不想閱讀的信息,而不會使自己淹沒在各種大量沒興趣的信息中。文章在開始部分先介紹了Android的基本知識和開發(fā)流程,在后續(xù)部分重點介紹了在研發(fā)過程中的準備工作以及遇到的一些問題。首先根據(jù)目前豌豆莢、應(yīng)用寶等相關(guān)的App下載平臺的統(tǒng)計數(shù)據(jù),通過數(shù)據(jù)對比決定使用SAX解析作為解析RSS源的算法。
[關(guān)鍵詞]安卓應(yīng)用;新聞閱讀器;RSS解析;SAX算法
[DOI]10.13939/j.cnki.zgsc.2018.02.173
1 引 言
1.1 研究的意義
RSS技術(shù)可以讓閱讀者有一個高效管理信息的閱讀模式,能夠快速準確地找到自己想要的信息。也可以給信息提供服務(wù)商一個安全、成本較低且十分高效的發(fā)布信息的相關(guān)渠道。
1.2 課題研究方法及其內(nèi)容
通過了解這個基于Android平臺的RSS閱讀器來了解開發(fā)流程和提升自己對計算機學科的興趣。
具體來講:第一,從實用性和簡約的角度來進行UI設(shè)計,熟悉Android應(yīng)用程序開發(fā)的UI設(shè)計過程。第二,經(jīng)過比較的選擇,選擇合適的算法來讀取RSS源的內(nèi)容。第三,經(jīng)過對功能點的統(tǒng)計和設(shè)計,來明白怎樣更好地提高用戶體驗,增加程序的實用性。第四,對App進行系統(tǒng)的測試,確保能夠正常使用。
2 關(guān)鍵技術(shù)分析
2.1 Android平臺
Android是一種以Linux為基礎(chǔ)的開源代碼操作系統(tǒng)。由Google持續(xù)領(lǐng)導和開發(fā)中。Android平臺是基于在Linux內(nèi)核以上的開發(fā)工具,所以保證了很大程度的內(nèi)容的多樣性和可移植性。Android平臺已經(jīng)為開發(fā)應(yīng)用程序的過程當中提供了一套很好很實用的框架,筆者可以在這個平臺上開發(fā)出不同的適應(yīng)需求的應(yīng)用程序。[1]
2.1.1 Android特征
Dalvik虛擬:Android采用的是自主開發(fā)的Dalvik虛擬機技術(shù),所占用的資源比例雖然小,但運行效率卻是相當快的。
集成瀏覽器:基于WebKit引擎的開源。
優(yōu)化的圖形:Android使用的是自定義二維圖形庫。
SQLite數(shù)據(jù)庫:SQLitet提供結(jié)構(gòu)化的數(shù)據(jù)存儲。
多媒體支持:支持如MP3、JPG、PNG等多種音視頻和圖像格式。
強大的開發(fā)環(huán)境:Android應(yīng)用程序開發(fā)環(huán)境只需要大家常用的Eclipse、設(shè)備模擬器以及Eclipse IDE的開發(fā)插件 [2]。
2.1.2 Android架構(gòu)
Android的系統(tǒng)架構(gòu)從上到下分別是應(yīng)用程序?qū)?、?yīng)用程序框架層、系統(tǒng)運行庫層、Linux核心層。
Android平臺內(nèi)已經(jīng)存在了如發(fā)短信、日歷和接打電話等程序。我們可以在這個平臺上編寫出更多自己想要開發(fā)的程序。開發(fā)語言主要為Java,當然,我們也可以利用其他語言編碼。
Android應(yīng)用程序的開發(fā)是基于框架和組件。Android框架本身已經(jīng)為我們提供了很多的實用的組件來供使用,但我們也可以根據(jù)自身需求來編寫新的組件,供自己的程序來進行調(diào)用,十分方便。
Android系統(tǒng)平臺是優(yōu)化了的Linux內(nèi)核。比如可靠的安全性、進程管理、內(nèi)存管理等都是依賴Linux內(nèi)核。
2.1.3 Android應(yīng)用的構(gòu)成和工作機制
對于一個Android應(yīng)用程序來說,是由Activity(活動)、 Intent Receiver(目的接收方)、Service(服務(wù))、Content Provider(內(nèi)容提供者)四部分組成。在Android程序中有一個很重要的配置文件:androidMainfest.xml。筆者需要在這個文件中定義需要使用的組件和它的功能。
Activity是應(yīng)用程序中最基本也是最重要的構(gòu)造塊,一個屏幕就是一個Activity。每個Activity都是繼承自Activity基類的獨立的類。我們使用setContentView(View)方法來展示我們已經(jīng)定義好了的界面。
(1)活動生命周期
Activity(活動)有三個很關(guān)鍵的循環(huán)。
第一,活動的整個生命期:系統(tǒng)啟動Activity會先調(diào)用onCreate(Bundle),最后以調(diào)用onDestroyO結(jié)束。系統(tǒng)使用onCreate()實現(xiàn)初始化。調(diào)用onDestroyO結(jié)束工作,同時釋放所占有的空間。
第二,活動的可見生命期:系統(tǒng)的Activity從調(diào)用onStart()開始,然后到onStop()停止。在此期間,Activity是通過顯示在屏幕上與用戶交互。即使用戶不進行交互也可以在屏幕上顯示。
第三,活動的后臺生命期:從調(diào)用onResume()開始,到調(diào)用onPause()結(jié)束。當用戶切出當前屏幕調(diào)用onPause(),切回來時調(diào)用onResume()。我們可以多次調(diào)用這兩個方法,來實現(xiàn)活動在resumed和pasued之間的轉(zhuǎn)換[3]。
(2)活動之間的切換
在Android開發(fā)中一般使用Intent類實現(xiàn)Activity之間的相互跳轉(zhuǎn)。Intent是一種運行時綁定機制,能夠在應(yīng)用的運行過程中連接兩個不同的組件。因此Intent起一個中介作用,用來連接調(diào)用和被調(diào)用者兩者之間的聯(lián)系。
Service是運行于應(yīng)用程序后臺沒有界面的程序。它擁有一個較長的生命周期。這個服務(wù)在用戶進行其他操作的時候,一直運行在后臺,直到用戶停止該服務(wù)或者服務(wù)運行結(jié)束。現(xiàn)在的一些媒體播放器就是利用這個方法實現(xiàn)的,可以讓用戶在聽音樂的同時盡心愉快地聊天。endprint
2.2 Java
Java是1995年5月由SUN公司推出的一種可以編寫跨平臺應(yīng)用軟件的面向?qū)ο蟮某绦蛟O(shè)計語言。Java分為三個體系,J2SE、J2EE、J2ME。Java 因為其卓越的通用性、高效性、跨平臺性和安全性,被普遍地應(yīng)用于個人PC、移動電話和互聯(lián)網(wǎng)等行業(yè)中。在全世界計算機行業(yè)飛速發(fā)展的氛圍中,Java擁有明顯的優(yōu)勢和廣闊的發(fā)展前途。
Eclipse是一個開源的、以Java為基礎(chǔ)的可擴展開發(fā)平臺。它本身是一個框架和一組服務(wù),我們使用它進行開發(fā)需要通過插件和組件來搭建我們的環(huán)境。Eclipse 附帶了一個標準的插件集,包括Java開發(fā)工具(Java Development Kit,JDK)[3]。
2.3 SQLite數(shù)據(jù)庫
SQLite是一款較低級別的數(shù)據(jù)庫,是嵌入式的,需要很低的資源,其設(shè)備中,內(nèi)存有幾百K就足夠用了。它可以使用在Windows/Linux /Unix等常見的操作系統(tǒng)中,同時還能支持大量編程語言,如 C#、C++、Java等,而相對于Mysql、PostgreSQL這兩款數(shù)據(jù)庫管理系統(tǒng),它占有了很大的處理速度優(yōu)勢。
3 系統(tǒng)功能分析
3.1 界面設(shè)計
在主界面是用屬狀機構(gòu)來實現(xiàn)用戶管理新聞分類的,主要使用的是Expandable List View來實現(xiàn)的。并且為其他在應(yīng)用中可能使用到的空間做了研究和準備,使開發(fā)過程中更順利。在實現(xiàn)底部功能按鈕的時候使用了GridView。使底部操作看上去十分簡潔,操作上也簡單便利了很多。
在顯示新聞列表的界面使用了大家熟悉的簡單的ListView來進行實現(xiàn),可以把這個分類里面的新聞以一行一行的形式顯示出來,整齊不雜亂。用戶可以點擊一條他感覺有興趣的新聞進去,然后顯示的是概要的瀏覽界面。
在新聞的概要界面使用TextView搭配Button來實現(xiàn)的。這樣使得界面的簡潔性得到保障,在功能使用的方便性方面也很好。
3.2 RSS解析
在Android平臺上可以使用Simple API for XML(SAX)、Document Object Model(DOM)和Android附帶的pull解析器解析XML文件。
3.2.1 使用SAX讀取XML文件
我們的智能手機等移動設(shè)備相對于電腦來說內(nèi)存較小,SAX解析占用內(nèi)存小,速度快的特點很適用于我們的設(shè)備。SAX解析XML文件使用的方式是事件驅(qū)動,它并不是把整個完整的文檔全部解析完,它使用的是內(nèi)容順序來解析需要解析的文檔的進程,SAX自己能夠判斷當前遇到的字符是否符合XML中語法的某一個部分,如果滿足這個條件我們就會觸發(fā)調(diào)用事件。這里的事件指的是一些回調(diào)方法,他們定義在ContenHandler借口當中。
下面這些ContentHandler接口在開發(fā)過程中經(jīng)常用到。
startDocument()在文檔開頭實收時進行調(diào)用,做些預處理的工作。
endDocument()和上面的方法相對應(yīng),做文檔結(jié)束后的善后工作。
startElement()在遇到一個開始標簽時,調(diào)用這個方法。
endElement()和上面的方法相對應(yīng),調(diào)用這個方法,是在遇到一個結(jié)束標簽的時候。
characters(char[]ch,int start, int length)這個方法用來處理在XML文件中讀到的內(nèi)容,我們可以使用使用new String(ch,start,length)獲取內(nèi)容。
3.2.2 使用DOM讀取XML文件
除了使用SAX可以解析XML文件外,也可以使用DOM來解析XML文件。二者不同的是,DOM進行解析XML文件時,是全部將XML文件都讀取到內(nèi)存中,使用DOM API來遍歷XML樹、找到所需數(shù)據(jù)。通過DOM對XML的內(nèi)容的操作可以直觀容易理解,在某些方面比SAX更加容易便捷。但是,因為DOM需要先將XML文件全部包含的內(nèi)容讀取到內(nèi)存中,所以對 Android智能手機內(nèi)存較小的智能設(shè)備來說,所付出的代價比較大。如果XML的文件內(nèi)容比較小,采用DOM可能比SAX更容易一些。
3.3 數(shù)據(jù)存儲
隨著用戶使用時間增長,大量的新聞分類以及眾多的RSS源地址,為了實現(xiàn)更好的管理,以及存取數(shù)據(jù)的及時性,可以采用Android內(nèi)嵌的SQLite數(shù)據(jù)庫來解決這個問題,把數(shù)據(jù)存入了數(shù)據(jù)庫,用戶的每次交互動作就可以直接從已經(jīng)保存好數(shù)據(jù)的數(shù)據(jù)庫中直接讀取了。
4 系統(tǒng)功能實現(xiàn)
4.1 主界面的設(shè)計
鑒于Android平臺手機屏幕本身尺寸的限制,為了不讓用戶有凌亂的感覺,在主界面決定使用雙層樹狀結(jié)構(gòu)的ExpandableListView控件進行管理和顯示,這樣的話就解決了隨著用戶使用時間長,新聞分類增加不便于管理和選擇的難題,使用左側(cè)彈開式結(jié)構(gòu)能夠便于用戶選取新聞頻道。
4.2 新聞列表界面的設(shè)計
當我們點開一個新聞分類后我們的程序會進入展示這個分類所有新聞的列表界面,在這個界面上是以一行一行的形式來顯示這個分類下的所有新聞信息,每一行顯示的是這條新聞的標題和它的發(fā)布時間。這個界面使用的是ListView來實現(xiàn)的,這樣使得看起來直接,沒有被各種信息充斥的煩亂的感覺,在Android較小的屏幕上一次性地為用戶展示更多的感興趣的新聞資訊。
在這個列表中的每一行都對應(yīng)了這個分類下的相關(guān)的新聞資訊,我們單擊這一列就可以進入這條新聞的詳細界面。這個界面中的列表可以上下滑動,因為每個分類的新聞信息有很多,鑒于手機屏幕尺寸的限制,不可能把數(shù)以千計的新聞全部都顯示出來,可以通過下滑加載出下方隱藏的新聞資訊。這個功能很符合現(xiàn)在人們使用軟件的習慣,便于使用。
4.3 新聞閱讀界面的設(shè)計
在這個界面是來顯示我們在列表界面單擊了一條新聞資訊的大體意思,這個界面是使用TextView實現(xiàn)的,主要顯示的是標題、發(fā)布時間和對新聞資訊的描述。
“返回”按鈕實現(xiàn)了返回功能,當然也可以利用系統(tǒng)自帶的返回功能鍵完成這個動作。
4.4 新聞列表的呈現(xiàn)
新聞列表呈現(xiàn)啟動 Activity 是 MainActivity 類。Activity 的入口點是 onCreate 方法,NewsFragment 的用戶界面包括一個 ListView。ListView中顯示 RSSFeed 中的 RSSItem 列表。
參考文獻:
[1]靳巖,姚尚朗.Android開發(fā)入門與實踐 [M].北京:人民郵電出版社,2009:3-54.
[2]余志龍,陳昱勛.Android SDK開發(fā)范例大全 [M].北京:人民郵電出版社,2009:90-146.
[3]李鋼.設(shè)計文脈在信息時代的表現(xiàn)特征 [J].遼東學院學報:自然科學版,2008(1):20-34.endprint