- Android應用程序開發與典型案例
- 鄭萌 趙常松等編著
- 674字
- 2018-12-27 18:22:08
上篇 Android應用程序設計基礎
第1章 Android基本概念
本章介紹Android基本概念方面的內容,包括Android平臺特性、Android系統架構、Android開發框架以及OMS介紹。
1.1 Android簡介
Android一詞的本義指“機器人”,它是由Google公司于2007年11月推出的基于Linux平臺的開源手機操作系統,依靠Google的強大開發和媒體資源,Android成為眾多手機廠商競相追逐的對象,逐漸發展成為目前最流行的手機開發平臺。圖1-1所示為Android系統的Logo。

圖1-1 Android系統的Logo
Android是一個包括操作系統、中間件、用戶界面和關鍵應用軟件的移動設備軟件堆。換句話說,Android是基于Java并運行在Linux內核上的輕量級操作系統,功能全面,包括一系列Google公司在其內置的應用軟件,如電話、短信等基本應用功能。圖1-2所示為Android的模擬器,從中可以大概了解Android的運行界面。

圖1-2 Android模擬器
問:模擬器和真機有什么區別呢?
答:
? 模擬器不支持呼叫和接聽實際來電,但可以通過控制臺模擬電話呼叫(呼入和呼出)。
? 模擬器不支持USB連接。
? 模擬器不支持相機/視頻捕捉。
? 模擬器不支持音頻輸入(捕捉),但支持輸出(重放)。
? 模擬器不支持擴展耳機。
? 模擬器不能確定連接狀態。
? 模擬器不能確定電池電量水平和充電狀態。
? 模擬器不能確定SD卡的插入/彈出。
? 模擬器不支持藍牙。
1.2 Android平臺特性
隨著科技的發展,移動電話(Mobile Phone)正向著智能化的方向邁步,并逐步成為多種工具的功能載體,而Android就是這樣一個智能手機的平臺,一個多種工具的功能載體。
1.通信工具
移動電話的最基本功能即為通信,因此,使用運營商提供的通信網絡進行語音通話也是Android平臺的最基本功能。除了傳統的語音通話功能外,Android平臺還具有短消息功能,以及通常移動電話都具有的個人信息系統管理方面的功能(如電話本等)。
2.網絡工具
隨著數字業務使用的普遍化,移動電話通常作為網絡工具使用,這樣移動電話可以完成電腦的部分功能。由此,Android平臺在網絡方面的功能主要包括瀏覽器、IM(即時信息)、郵件等,基本包含了網絡方面的大部分功能。
3.媒體播放器
隨著多媒體技術的應用,在移動電話上進行音頻和視頻播放已經成為經常使用的功能。由此,Android平臺具有支持更多的音頻/視頻格式,支持更高分辨率的視頻、更流暢地播放,以及和網絡結合的流媒體方面等功能。
4.媒體獲取設備
隨著移動電話與媒體獲取設備的集成日益增強,Android平臺提供了照相機、錄音機、攝像機等功能。
5.多類型的連接設備
Android平臺提供了多種連接方式,如USB、GPS、紅外、藍牙、無線局域網等。
6.具有友好和絢麗的用戶界面
Android平臺具有友好的用戶界面,使用戶容易學習和操作,同時具有絢麗的用戶界面,具有良好的視覺效果。
7.可以個性化定制的平臺
Android平臺對于用戶的個性化需求,提供了全面自定義手機的功能。
除了以上介紹Android平臺的功能以外,其在技術上還具有以下幾個方面的特性。
? 全開放智能移動電話平臺。
? 支持多硬件平臺。
? 使用眾多的標準化技術。
? 核心技術完整、統一。
? 完善的SDK和文檔。
? 完善的輔助開發工具。
1.3 Android系統架構
如圖1-3所示,Android系統從下至上分為四層:Linux內核、Android核心庫及Android運行時環境(Android Runtime)、應用程序框架以及應用程序等。

圖1-3 Android系統框架
1.3.1 Linux內核(Linux Kernel)
Android的核心系統服務依賴于Linux 2.6,例如,安全、內存管理、進程管理、網絡堆棧、驅動模型。Linux Kernel也作為硬件和軟件之間的抽象層,它隱藏具體硬件細節而為上層提供統一的服務。
除了標準的Linux內核以外,Android系統還增加了內核的驅動程序,例如,顯示驅動、藍牙驅動、相機驅動、閃存卡驅動、Binder IPC驅動、輸入設備驅動、USB驅動、WiFi驅動、音頻系統驅動、電源管理等,為Android系統的運行提供基礎性支持。
這樣分層的好處就是使用下層提供的服務而為上層提供統一的服務,屏蔽本層及以下層的差異,當本層及以下層發生了變化時,不會影響到上層。也就是說,各層各盡其職,各層提供固定的SAP(Service Access Point),即高內聚、低耦合。
1.3.2 Android核心庫(Libraries)
Android包含一個C/C++庫的集合,以供Android系統的各個組件使用。這些功能通過Android的應用程序框架(Application Framework)展現給開發者。下面列出一些核心庫:
? 系統C庫——由BSD繼承衍生的標準C系統函數庫(libc),調整為基于嵌入式Linux設備的庫。
? 媒體庫——基于PacketVideo的OpenCORE。這些庫支持播放和錄制多種流行的音頻和視頻格式,以及多種媒體格式的編碼/解碼格式,包括MPEG4、 H.264、 MP3、AAC、AMR、JPG、PNG。
? 界面管理——顯示子系統的管理器,管理訪問顯示子系統和無縫組合多個應用程序的二維和三維圖形層。
? LibWebCore——新式的Web瀏覽器引擎,驅動Android瀏覽器和可嵌入的Web視圖。
? SGL——Skia圖形庫,基本的2D圖形引擎。
? 3D libraries——基于OpenGL ES APIs的實現。該庫使用硬件3D加速或使用高度優化的3D軟加速。
? FreeType ——位圖(Bitmap)和矢量(Vector)字體渲染。
? SQLite ——所有應用程序都可以使用的強大而輕量級的關系數據庫引擎。
1.3.3 Android運行時環境(Android Runtime)
在Linux內核層上還有一個Android運行時層,該層包括Dalvik虛擬機及Java核心庫,提供了Java編程語言核心庫的大多數功能。
Dalvik虛擬機是Android使用的Java虛擬機。每一個Android應用程序是Dalvik虛擬機中的實例,運行在它們自己的進程中。Dalvik虛擬機設計成在一個設備上可以高效地運行多個虛擬機。Dalvik虛擬機可執行的文件格式是.dex,.dex格式是專為Dalvik設計的一種壓縮格式,適合內存和處理器速度有限的系統。
大多數虛擬機(包括JVM)都是基于棧的,而Dalvik虛擬機則是基于寄存器的。兩種架構各有優劣,一般而言,基于棧的機器需要更多的指令,而基于寄存器的機器指令更大。DX是一套工具,可以將Java .class轉換成 .dex格式。一個.dex文件通常會有多個.class。由于.dex有時必須進行最佳化,會使文件大小增加1~4倍,以ODEX結尾。
Dalvik虛擬機依賴于Linux內核提供基本功能,如線程和底層內存管理。
1.3.4 Android應用程序框架(Application Framework)
位于Android程序庫和運行時上面的是應用程序框架層。通過提供開放的開發平臺,Android使開發者能夠訪問核心應用程序所使用的API框架,這樣使得組件的重用得以簡化,任何應用程序都能發布它的功能且任何其他應用程序可以使用這些功能(需要服從框架執行的安全限制)。從而使開發者可以編制極其豐富和新穎的應用程序,自由地利用設備硬件優勢、訪問位置信息、運行后臺服務、設置鬧鐘、向狀態欄添加通知等。
每個應用程序其實是一組服務和系統,包括:
? 視圖(View)——豐富的、可擴展的視圖集合,用來構建應用程序。包括列表(ListView)、網格(Grid)、文本框(EditText/TextView)、按鈕(Button)等,甚至是可嵌入的網頁瀏覽器(WebView)。
? 內容提供器(Content Providers)——使應用程序可以訪問其他應用程序(如通訊錄)的數據,或共享自己的數據。
? 資源管理器(Resource Manager)——提供對于非代碼資源的訪問,如本地化字符串、圖形和布局文件。
? 通知管理器(Notification Manager)——使應用程序能夠在狀態欄顯示自定義的提示信息。
? 活動管理器(Activity Manager)——管理應用程序生命周期,并提供常用的導航回退功能。
1.3.5 Android應用程序
Android裝配一個核心應用程序集合,連同系統一起發布,這些應用程序包括電子郵件客戶端、SMS程序、日歷、地圖、瀏覽器、聯系人和其他設置等。而所有應用程序都是用Java語言編寫的,由用戶開發的Android應用程序和Android核心應用程序是同一層次的。
1.4 Android開發框架
Android系統作為一個開放的系統,它體積龐大,對于不同的開發者來說,在開發過程中并不需要掌握整個Android系統,只需要進行其中某一部分的開發。由此,從功能上將Android開發分為移植開發移動電話系統、Android應用程序開發,以及Android系統開發三種。
從商業模式的角度來講,移植開發移動電話系統和Android應用程序開發是Android開發的主流。移植開發移動電話系統主要是由移動電話的制造者來進行開發,其產品主要是Android手機;而公司、個人和團體一般進行Android應用程序的開發,產生各種各樣的Android應用程序。
對于Android移植開發,其主要工作集中于Linux內核中的相關設備驅動程序及Android本地框架中的硬件抽象層接口的開發;對于Android應用程序開發,其開發的應用程序與Android系統的第四個層次的應用程序是一個層次的內容;對于Android系統的開發,涉及Android系統的各個層次,一般情況下是從底層到上層的整體開發。
Android開發框架包括基本的應用功能開發、數據存儲、網絡訪問三大塊。
1.4.1 應用方面
一般而言,一個標準的Android程序包括Activity、Broadcast Intent Receiver、Service、Content Provider四部分。
1.Activity
Activity是在Android應用開發中最頻繁、最基本的模塊。在Android中,Activity類主要與界面資源文件相關聯(res/layout目錄下的xml資源,也可以不含任何界面資源),包含控件的顯示設計、界面交互設計、事件的響應設計以及數據處理設計、導航設計等Application設計的方方面面。
因此,對于一個Activity來說,它就是手機上的一個界面,相當于一個網頁,所不同的是,每個Activity運行結束時都返回一個返回值,類似一個函數。Android系統會自動記錄從首頁到其他頁面的所有跳轉記錄并且自動將以前的Activity壓入系統堆棧,用戶可以通過編程的方式刪除歷史堆棧中的Activity Instance。
2.Broadcast Intent Receiver
Intent為不同的Activity進行跳轉提供了機制,譬如從A Activity跳轉到B Activity,使用Intent來實現,語句如下。
Intent in = new Intent(A.this, B.class); startActivity(in);
Broadcast Intent Receiver為各種不同的Android應用程序間進行進程間的通信提供了可能。如當電話呼叫來臨時,可以通過Broadcast Intent Receiver發布廣播消息。對用戶而言,用戶是無法看到Broadcast Intent Receiver事件的,它對用戶是不透明的,Broadcast Intent Receiver通過Notification Manager來通知用戶這些事件發生了,它既可以在資源AndroidManifest.xml中注冊,也可以在代碼中通過Context.registerReceiver()進行注冊在AndroidManifest.xml中注冊以后,當事件來臨時,即使程序沒有啟動,系統也會自動啟動此應用程序。另外,各應用程序可以很方便地通過Context.sendBroadcast()將自己的事件廣播給其他應用程序。
3.Service
Android中的Service和Windows中的Service完全是一個概念,用戶可以通過StartService(Intent service)啟動一個Service,也可通過Context.bindService來綁定一個Service。
4.Content Provider
Content Provider提供了應用程序之間數據交換的機制,一個應用程序通過實現一個Content Provider的抽象接口將自己的數據暴露出去,并且隱蔽了具體的數據存儲實現,這樣實現了Android應用程序內部數據的保密性。標準的Content Provider提供了基本的CRUD(Create、Read、Update、Delete)接口,并且實現了權限機制,保護了數據交互的安全性。
一個標準的Android應用程序的工程文件包含以下幾大部分。
? Java源代碼部分(包含Activity)——放置在src目錄中。
? R.java文件——由Eclipse自動生成與維護,開發者不需要修改,提供了對Android資源的全局索引。
? Android Library——應用程序運行的Android庫。
? assets目錄——主要用于放置多媒體等文件。
? res目錄——放置的是資源文件: drawable包含的是圖片文件,layout里面包含的是布局文件,values里面主要包含的是字符串(strings.xml)、顏色(colors.xml)以及數組(arrays.xml)資源。
? AndroidManifest.xml——應用的配置文件,在這個文件中,需要聲明所有用到的Activity、Service、Receiver等。
1.4.2 數據存儲
Android中提供的存儲方式包括:SharedPreferences、文件存儲、SQLite數據庫存儲方式、內容提供器方式Content Provider以及網絡方式5種,具體介紹如下。
1.SharedPreferences
作為Android提供的一種配置文件讀/寫方式,默認保存在應用的目錄data/<package name>/shared_prefs下,通過方法getSharedPreferences(xx, 0);來獲取SharedPreferences對象進行讀/寫操作。
2.文件存儲
Android系統提供了進行數據讀/寫訪問的API,例如,openFileInput、openFileOutput等,需要特別注意的是,Android中應用程序的數據是私有的,也就是說,其他應用程序無法訪問當前應用程序產生的文件。
3.SQLite數據庫存儲方式
通過繼承SQLiteOpenHelper類提供的CRUD接口來進行數據庫操作,方便了應用程序的數據存儲操作。
4.內容提供器方式(Content Provider)
通過調用其他應用程序的數據接口來實現數據的讀/寫訪問。
5.網絡方式
主要通過下面要提到的網絡訪問該網絡提供的網絡服務接口,實現數據的讀/寫服務(如WebService數據訪問接口)。
1.4.3 網絡訪問方面
Android主要通過java.net.*及Android.net.*來進行HTTP訪問技術的封裝;利用其提供的HttpPost、DefaultHttpClient、HttpResponse等類提供的訪問接口來實現具體的Web服務訪問。
1.4.4 開發流程
軟件開發流程(Software Development Process)即軟件設計思路和方法的一般過程,包括設計軟件的功能及實現的算法和方法、軟件的總體結構設計和模塊設計、編程和調試、程序聯調和測試以及編寫、提交程序。軟件開發的生命周期如圖1-4所示。

圖1-4 軟件開發的生命周期
需求分析:根據客戶的要求,清楚了解客戶需求中的產品功能、特性、性能、界面和具體規格等,然后進行分析,確定軟件產品所能達到的目標。
設計:根據需求分析的結果,考慮如何在邏輯、程序上去實現所定義的產品功能、特性等,可以分為概要設計和詳細設計,也可以分為數據結構設計、軟件體系結構設計、應用接口設計、模塊設計、界面設計等。
編程(實現):開始具體的編寫程序工作,分別實現各模塊的功能,從而實現對目標系統的功能、性能、接口、界面等方面的要求,將設計轉換成計算機可讀的形式。
測試:對設計、編程進行驗證,對用戶需求進行確認。
維護:維持軟件運行、修改軟件缺陷、增強已有功能、增加新功能、升級等。
對一個軟件產品或者一項軟件工程來說,參與角色通常包括以下幾種。
? 高級經理:參與項目過程中各個關鍵環節的活動,關注產品開發的進度,對風險控制、資源提供做出決策。
? 產品經理或項目經理:客戶方和公司內部交流的紐帶,主要對項目過程進行監控,對項目的進度、質量負責,制定計劃、協調資源、關注和控制計劃進度、控制客戶期望值等。
? 開發經理:負責界定需求,確定適當的技術構架和體系,保證軟件產品按照設計的標準開發。
? 設計師:通常設計師可以分需求分析師、構架設計師、業務設計師3種,能夠準確把握客戶需求并提供可行的實現思路,進行需求分析、進行構架設計和功能設計,按照規范編寫相應的文檔,將設計思路傳播給開發人員、測試人員。
? 測試經理及測試人員:測試經理主要負責計劃和組織測試人員對目標產品進行測試,發現bug、跟蹤bug,直到解決bug;測試人員則根據測試經理的計劃和測試總體方案對目標產品進行測試,編寫測試用例和測試代碼,發現和跟蹤bug;編寫用戶手冊;進行用戶培訓和教育。
? 開發人員:根據設計師的設計成果進行具體編碼工作,對自己的代碼進行基本的單元測試。
? 項目實施人員:負責軟件系統安裝配置、系統割接、運行期間的維護工作。
1.5 OMS簡介
OMS是Open Mobile System的簡稱,是中國移動和Google聯合開發的一款開放式手機操作系統。該系統基于Linux內核,為Android平臺而構建,并在原有的Android平臺基礎上針對中國市場進行特殊優化,內置了中國移動的服務菜單、音樂隨身聽、手機導航、號簿管家、139郵箱、飛信、快訊和移動夢網等特色業務,以滿足中國市場的需求。
1.5.1 OPhone介紹
聯想的OPhone手機是首款使用OMS系統的手機。OPhone是基于Linux的面向移動互聯網的終端基礎軟件及系統解決方案。為了突破TD終端“瓶頸”,以及促進手機終端與中國移動的網絡及應用服務進行無縫對接,中國移動在Google Android操作系統的基礎上,基于Linux內核,推出了 “深度定制”的移動操作系統OPhone,其在業務層和用戶體驗層與此前的谷歌手機不完全一樣。目前來講,OPhone與Android是兼容的。
下面介紹OPhone和Android的不同。
? 移動業務層面:在終端手機上完整深度定制了多種中國移動數據業務,例如,飛信、快訊、無線音樂隨身聽、139郵箱、移動夢網、號簿管家、百寶箱等。使中國移動的數據業務第一次和手機的自身用戶體驗達到深度結合,例如,電話本中可以探測出好友飛信的在線狀態,音樂播放器本地和網絡的用戶體驗完全一致,短信中如果收到郵件地址可以用139郵箱直接回復,移動夢網的瀏覽器和普通網頁的瀏覽器完全相同等。
? 手機基本功能:在手機基本通信功能上也結合了中國人的使用習慣并集成了很多品牌優秀的地方。例如,手寫輸入和拼音T9鍵盤的集成,拼音和手寫的切換,撥號鍵盤可以用拼音直接調出聯系人,對話模式和文件夾模式可以隨意選擇短信息用戶界面,彩信和短信結合的信息操作邏輯,還有其可以隨意定制的主屏幕,絢麗的動畫及奇妙的解鎖方式等都體現了OMS對手機基本功能的重視。
? 用戶體驗層面:結合中國人自己的用戶行為和喜好方式,并吸取了iPhone、Android、Windows Mobile、Nokia、Black Berry等多種移動終端的優勢,設計出了完全區別于Android的用戶界面。其主要特點是大屏幕全觸摸的操作風格,面向移動互聯網應用的設計理念。
? OMS的開放:除了易用、美觀的界面,API的開發和兼容是OMS另一大核心競爭力。開發者可以在OMS上開發多種平臺API的小工具,例如,OMS可以兼容iPhone、Android、S60、Windows Mobile等小工具的使用,OMS是一個百家爭鳴,百花齊放的平臺,為移動互聯網的發展推波助瀾。
1.5.2 Widget介紹
Widget是指小工具,比如,Windows Vista系統界面中的側邊欄、博客網頁中的側邊欄等。而手機平臺也有對應的Widget,它是安裝在手機上的小容量客戶端應用程序。例如,桌面時鐘、實時天氣等。以下主要介紹手機平臺上的Widget。
Widget不僅兼容多種網頁技術(XHTML、CSS、JavaScript、AJAX),而且還可以通過三星Widget API獲取各種手機功能。通常Widget主要用于應付簡單任務,如提供網站搜尋界面。執行簡單計算、顯示新聞標題、天氣預報、提供股票行情等。此外,Widget還可以充當提供多重功能的復合應用程序,Widget的開發和手機安裝是十分快捷便利的。
Widget在Widget系統托盤條中都有自己的托盤圖標,都可以通過Widget包格式來實現分發,都擁有XHTML文件、CSS樣式表、JavaScript代碼及圖像文件。Widget可以分為在線Widget與離線Widget。在線Widget通過手機數據連接(WiFi/3G/EDGE/GPRS)來獲取內容/數據,而離線Widget只能使用用戶生成的數據或存儲在手機中或Widget中固定編程的數據。
1.6 本章小結
本章從介紹Android基本概念開始,讓讀者了解了Android平臺特性、Android系統架構、Android開發框架,以及OMS等知識,使讀者可以對Android的應用前景有一個很好的認識。
關鍵知識點測評
1.以下有關Android平臺的說法,不正確的一個是( )。
A.Android平臺具有傳統的語音通話功能
B.Android具有短消息功能,以及通常移動電話都具有的個人信息系統管理方面的功能
C.Android平臺提供了USB、GPS、紅外、藍牙、無線局域網等多種連接方式
D.Android平臺不能自定義手機的功能
2.以下有關Android的敘述中,正確的一個是( )。
A.Android系統自上而下分為三層
B.Android系統在核心庫層增加了內核的驅動程序
C.Android包含一個C/C++庫的集合,以供Android系統的各個組件使用。這些功能通過Android的應用程序框架(Application Framework)展現給開發者
D.Android的應用程序框架包括Dalvik虛擬機及Java核心庫,提供了Java編程語言核心庫的大多數功能
3.以下有關Android程序庫層的敘述,不正確的一個是( )。
A.系統C庫是專門為基于嵌入式Linux的設備定制的庫
B.媒體庫支持播放和錄制多種流行的音頻和視頻格式以及多種媒體格式的編碼/解碼格式
C.SGL是Skia圖形庫,基本的3D圖形引擎
D.FreeType包含位圖(Bitmap)和矢量(Vector)字體渲染
4.以下有關Android開發框架的描述,正確的是( )。
A.一般而言,一個標準的Android程序包括Activity、Broadcast Intent Receiver、Service、Content Provider四部分
B.Android中的Service跟Windows當中的Service不同
C.Broadcast Intent Receiver提供了應用程序之間數據交換的機制
D.Content Provider為不同的Activity進行跳轉提供了機制
5.下列有關OMS的描述,正確的一個是( )。
A.OPhone與Android的用戶界面相同
B.OMS是在原有的Android平臺基礎上針對中國市場進行特殊優化,以滿足中國市場的需求
C.OMS不能兼容IPhone、Android、S60、Windows Mobile等小工具的使用
D.OPhone在業務層和用戶體驗層與此前的谷歌手機相同
- AngularJS入門與進階
- Visual FoxPro程序設計教程(第3版)
- Python量化投資指南:基礎、數據與實戰
- Vue.js 2 and Bootstrap 4 Web Development
- Scratch真好玩:教小孩學編程
- 匯編語言程序設計(第3版)
- 時空數據建模及其應用
- Arduino計算機視覺編程
- Machine Learning With Go
- Raspberry Pi Robotic Blueprints
- 編程改變生活:用Python提升你的能力(進階篇·微課視頻版)
- Python Machine Learning Blueprints:Intuitive data projects you can relate to
- Practical Predictive Analytics
- Deep Learning for Natural Language Processing
- Java程序設計實用教程(第2版)