陳濟海 張玉柱 胡自健
摘要:基于Android開發(fā)平臺,設計出一款針對深圳報業(yè)集團新聞業(yè)務的互動手機客戶端。該客戶端主要擁有新聞閱讀、 熱門新聞評論、 新聞爆料、 用戶注冊分享等功能??蛻舳瞬捎枚嗑€程異步加載服務器數(shù)據(jù),達到優(yōu)化客戶端響應速度的目的。同時客戶端采用可擴展標記語言(extensible markup language, XML)重寫Android部分控件構建用戶界面,具有良好的用戶體驗性。
關鍵詞: Android;多線程;新聞客戶端;Android控件重寫
中圖分類號:TP311 文獻標識碼:A 文章編號:1009-3044(2014)17-4016-04
近年來,隨著移動互聯(lián)網(wǎng)技術的快速發(fā)展,智能手機、平板電腦等移動智能終端越來越得到普及。2007 年底,Google發(fā)布了一個開放的智能移動設備設計的軟件平臺 Android[1]。截至2013年,Android份額進一步擴大至74.5%。人們已經(jīng)養(yǎng)成了通過智能終端上網(wǎng)瀏覽新聞、微信交友、網(wǎng)上購物等習慣。傳統(tǒng)報刊出版社、紙質雜志更新信息慢,實時性差,缺乏互動性。該文介紹了一款針對報業(yè)集團設計的全媒體互動手機客戶端。該應用的特點是能將深圳報業(yè)集團旗下各種報刊雜志的熱點新聞,財經(jīng)新聞,科技新聞等,按照用戶的喜好聚合到一起,供用戶閱讀。用戶可以對感興趣的新聞收藏評論分享,還能爆料身邊的新聞,參與到新聞的采編過程中。
1 研究基礎
1.1 Android開發(fā)平臺架構研究
Android操作系統(tǒng)是由Linux2.6操作系統(tǒng)、中間件以及核心應用程序組成。Android應用程序一般是由Java語言來編寫,現(xiàn)在也支持C++等其他語言[2]。Android操作系統(tǒng)的體系架構主要分為應用程序層、應用程序框架層、Android核心類庫、Linux內核層4部分。其中Android核心類庫層還包括Android運行時環(huán)境。本軟件在最上層應用程序層開發(fā),主要是調用應用程序框架層的類庫。
1.2 HTTP協(xié)議介紹
通信協(xié)議是指計算機通信網(wǎng)絡中兩臺計算機之間進行通信所必須共同遵守的規(guī)定或規(guī)則,HTTP協(xié)議是通信協(xié)議中的一種。HTTP協(xié)議的全稱是Hyper Text Transfer Protocol(超文本傳輸協(xié)議)。HTTP是一個應用層協(xié)議,由請求和響應構成,是一個標準的客戶端服務器模型??蛻舳讼蚍掌靼l(fā)送HTTP請求,HTTP請求由三部分組成:請求行(Request line)、請求頭(Request header)、請求體(Request body)[3]。服務器接到請求后生成相應的響應,然后發(fā)送給客戶端。HTTP響應也有三部分構成:狀態(tài)行(Response line),消息報頭(Response header)、響應正文(Response body)。
1.3自定義控件開發(fā)
Android系統(tǒng)提供了各種各樣的控件供開發(fā)使用,但在實際的開發(fā)中,系統(tǒng)提供的控件有時候不能滿足需求,這時就需要自定義一個控件。 自定義控件的實現(xiàn)方式主要分三種:繼承已有的控件來實現(xiàn)自定義控件,繼承自定義的一個XML[4]布局文件,通過inflater加載到界面中,繼承view類來實現(xiàn)自定義控件,這種方式定義的控件屬性更加靈活。
2 軟件架構
Android 互動手機客戶端主要分為4個子模塊: 數(shù)據(jù)顯示模塊,數(shù)據(jù)處理模塊,自定義控件模塊,工具類模塊。數(shù)據(jù)顯示模塊由若干個Activity構成,分別分為新聞瀏覽、圖片新聞、用戶信息、發(fā)現(xiàn)爆料、設置。數(shù)據(jù)處理模塊負責和Web服務器接口通信,下載上傳數(shù)據(jù),解析Json數(shù)據(jù)。自定義控件模塊主要是自定義的一些控件。工具類模塊主要提供一些工具類,例如時間顯示,第三方分享等。系統(tǒng)架構如圖1 所示。
3 主要關鍵技術
3.1 Android四大組件,主框架實現(xiàn)
由于Android應用程序沒有統(tǒng)一的應用程序入口(例如C語言的main方法),Google為Android應用程序設計了四大組件,根據(jù)各個組件完成的功能不同分為:Activity、Service、Broadcast Receiver、Content Provider。開發(fā)者通過這四大組件完成一個Android應用程序的設計。Activity是Android組件中最基礎最常用的一種組件。對于一個Android應用程序來說通常由多個activities組成,Activity可以看成一個單獨的屏幕[5]。應用程序中的一個activity被指定為"main"activity,當?shù)谝淮螁討贸绦虻臅r候呈現(xiàn)給用戶的那個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系統(tǒng)內部的應用程序之間??梢远x接口并把接口暴露出來,以便其他應用進行操作。Broadcast Receiver是用來接收廣播通知信息,并做出對應處理的組件。Content Provider主要是用來存儲和讀取數(shù)據(jù),應用程序之間通過Content Provider來訪問數(shù)據(jù)。4大基本組件都需要AndroidManifest文件中進行配置才能使用。配置代碼如下:
3.2從 web服務器下載上傳數(shù)據(jù)
程序運行的流暢性是十分重要的。如果主線程處理的事件耗時過長將會出現(xiàn)ANR(應用程序無響應)導致程序崩潰。由于數(shù)據(jù)下載的速度取決于很多的因素,所以就有必要將耗時較多的數(shù)據(jù)下載事件交給后臺線程處理,從而來提升用戶體驗,改善應用程序性能。本客戶端中的數(shù)據(jù)是通過 Apache提供的HttpClient類來進行實現(xiàn),將獲得服務器端的數(shù)據(jù),放在StringBuilder類型中。數(shù)據(jù)的處理過程如下圖所示。
3.3 JSON數(shù)據(jù)的解析
JSON即JavaScript Object Natation, 它是一種輕量級的數(shù)據(jù)交換格式, 與XML一樣, 是廣泛被采用的客戶端和服務端交互的解決方案[6]。JSON建構于兩種結構:對象(object)和數(shù)組(array)。JSON用"名稱 / 值對"來表示這兩種結構。下面是一個簡單的JSON數(shù)據(jù):{"total":2,"success":true,"arrayData":[{"id":2,"name":"小貓"}]}。JSONObject得到Json數(shù)據(jù)中的對象,JSONArray得到Json數(shù)據(jù)中的數(shù)組。下面是解析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");
解析出來的數(shù)據(jù)封裝成ArrayList數(shù)據(jù)結構。
3.4 數(shù)據(jù)的適配
在Android系統(tǒng)中,數(shù)據(jù)不能直接呈現(xiàn)在一些界面上,必須通過適配器(Adaper)完成。適配器可以說是數(shù)據(jù)和界面直接的橋梁。在常見的列表視圖控件(ListView)、縮略圖瀏覽器控件(Gallery)、網(wǎng)格控件(GridView)、下拉列表控件(Spinner,以及其他的繼承此類控件的自定義控件等,都需要適配器來進行數(shù)據(jù)的適配操作。常用的適配器有BaseAdapter,SimpleAdapter,ArrayAdapter,SimpleCursorAdapter,其中BaseAdapter是一個抽象類,具有較高的靈活性。我們一般繼承BaseAdapter這類適配器,封裝成適合界面的需求。BaseAdapter這個類中最重要的是getView()方法,用這個方法吧數(shù)據(jù)呈現(xiàn)在界面上。下面是個數(shù)據(jù)適配器的關鍵代碼:
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 功能實現(xiàn)
在如上所述的環(huán)境、 設計和開發(fā)規(guī)程步驟情況下實現(xiàn)了生活即時助手, 其功能描述如下所述。
1)通過對服務器數(shù)據(jù)的下載、解析、適配最終顯示在UI界面上,實現(xiàn)新聞閱讀功能。在軟件中使用自定義控件,實現(xiàn)新聞按欄目類別進行分類,如:社會、軍事、體育、娛樂等。用戶還可以根據(jù)需要喜好,自定義管理新聞欄目,如圖3所示。endprint
2)用戶注冊賬號后,可享受相關特權。用戶可以通過瀏覽評論新聞、瀏覽廣告、注冊新用戶、推薦用戶使用本軟件等獲取虛擬幣??梢酝ㄟ^虛擬幣在商城里兌換獎品,參加抽獎活動獲得大獎等。軟件還支持第三方登錄,利用OAuth協(xié)議實現(xiàn)第三方安全登錄,不會泄露用戶信息,如圖4所示。
3)將用戶的配置信息存在本地,可以實現(xiàn)在下一次開機時快速獲得用戶使用該軟件訂閱的報業(yè)集團旗下各種報刊雜志。程序通過HTTP協(xié)議向服務器上傳數(shù)據(jù),可以實現(xiàn)用戶爆料新聞,如圖5所示。
4)PreferenceActivity是Android中專門用來實現(xiàn)程序設置界面和參數(shù)存儲的一個Activity,我們只要繼承PreferenceActivity實現(xiàn)一個設置界面類,用戶就可以在設置是否加載圖片、清除緩存等人性化設置,如圖6所示。
5 結論
Android系統(tǒng)目前作為移動智能終端最主流的系統(tǒng),各行各業(yè)都在推出基于Android平臺的應用。該文為深圳報業(yè)集團設計了一款基于Android平臺的互動手機客戶端。這個系統(tǒng)能幫助企業(yè)在移動互聯(lián)網(wǎng)時代贏得用戶,跟上時代步伐。文中數(shù)據(jù)處理模塊的開發(fā)思路對其它Android應用有一定參考價值。圖片緩存的處理和多媒體播放是本軟件需要進一步優(yōu)化的地方。
參考文獻:
[1] Margaret Butler. Android: Changing the Mobile Landscape[J]. Pervasive Computing, IEEE, 2011,10(1).
[2] 郭宏志. Android應用開發(fā)詳解[M].北京:電子工業(yè)出版社,2010.
[3] 馬永亮. 基于Android手機平臺的好友通訊系統(tǒng)的設計與實現(xiàn)[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協(xié)議實現(xiàn)第三方安全登錄,不會泄露用戶信息,如圖4所示。
3)將用戶的配置信息存在本地,可以實現(xiàn)在下一次開機時快速獲得用戶使用該軟件訂閱的報業(yè)集團旗下各種報刊雜志。程序通過HTTP協(xié)議向服務器上傳數(shù)據(jù),可以實現(xiàn)用戶爆料新聞,如圖5所示。
4)PreferenceActivity是Android中專門用來實現(xiàn)程序設置界面和參數(shù)存儲的一個Activity,我們只要繼承PreferenceActivity實現(xiàn)一個設置界面類,用戶就可以在設置是否加載圖片、清除緩存等人性化設置,如圖6所示。
5 結論
Android系統(tǒng)目前作為移動智能終端最主流的系統(tǒng),各行各業(yè)都在推出基于Android平臺的應用。該文為深圳報業(yè)集團設計了一款基于Android平臺的互動手機客戶端。這個系統(tǒng)能幫助企業(yè)在移動互聯(lián)網(wǎng)時代贏得用戶,跟上時代步伐。文中數(shù)據(jù)處理模塊的開發(fā)思路對其它Android應用有一定參考價值。圖片緩存的處理和多媒體播放是本軟件需要進一步優(yōu)化的地方。
參考文獻:
[1] Margaret Butler. Android: Changing the Mobile Landscape[J]. Pervasive Computing, IEEE, 2011,10(1).
[2] 郭宏志. Android應用開發(fā)詳解[M].北京:電子工業(yè)出版社,2010.
[3] 馬永亮. 基于Android手機平臺的好友通訊系統(tǒng)的設計與實現(xiàn)[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協(xié)議實現(xiàn)第三方安全登錄,不會泄露用戶信息,如圖4所示。
3)將用戶的配置信息存在本地,可以實現(xiàn)在下一次開機時快速獲得用戶使用該軟件訂閱的報業(yè)集團旗下各種報刊雜志。程序通過HTTP協(xié)議向服務器上傳數(shù)據(jù),可以實現(xiàn)用戶爆料新聞,如圖5所示。
4)PreferenceActivity是Android中專門用來實現(xiàn)程序設置界面和參數(shù)存儲的一個Activity,我們只要繼承PreferenceActivity實現(xiàn)一個設置界面類,用戶就可以在設置是否加載圖片、清除緩存等人性化設置,如圖6所示。
5 結論
Android系統(tǒng)目前作為移動智能終端最主流的系統(tǒng),各行各業(yè)都在推出基于Android平臺的應用。該文為深圳報業(yè)集團設計了一款基于Android平臺的互動手機客戶端。這個系統(tǒng)能幫助企業(yè)在移動互聯(lián)網(wǎng)時代贏得用戶,跟上時代步伐。文中數(shù)據(jù)處理模塊的開發(fā)思路對其它Android應用有一定參考價值。圖片緩存的處理和多媒體播放是本軟件需要進一步優(yōu)化的地方。
參考文獻:
[1] Margaret Butler. Android: Changing the Mobile Landscape[J]. Pervasive Computing, IEEE, 2011,10(1).
[2] 郭宏志. Android應用開發(fā)詳解[M].北京:電子工業(yè)出版社,2010.
[3] 馬永亮. 基于Android手機平臺的好友通訊系統(tǒng)的設計與實現(xiàn)[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