andriod

andriod

Android是一種基於Linux的自由及開放原始碼的作業系統,主要使用於移動設備,如智慧型手機和平板電腦,由Google公司和開放手機聯盟領導及開發。尚未有統一中文名稱,中國大陸地區較多人使用“安卓”或“安致”。Android作業系統最初由Andy Rubin開發,主要支持手機。2005年8月由Google收購注資。2007年11月,Google與84家硬體製造商、軟體開發商及電信營運商組建開放手機聯盟共同研發改良Android系統。隨後Google以Apache開源許可證的授權方式,發布了Android的原始碼。第一部Android智慧型手機發布於2008年10月。2011年第一季度,Android在全球的市場份額首次超過塞班系統,躍居全球第一。 2013年的第四季度,Android平台手機的全球市場份額已經達到78.1%。2013年09月24日谷歌開發的作業系統Android在迎來了5歲生日,全世界採用這款系統的設備數量已經達到10億台。 2014第一季度Android平台已占所有移動廣告流量來源的42.8%,首度超越iOS。但運營收入不及iOS。

系統簡介

Android一詞的本義指“機器人”,同時也是Google於2007年11月5日宣布的基於Linux平台的開源手機作業系統的名稱,該平台由作業系統、中間件、用戶界面和套用軟體組成。

Android一詞最早出現於法國作家利爾亞當(Auguste Villiers de l'Isle-Adam)在1886年發表的科幻小說《未來夏娃》(L'ève future)中。他將外表像人的機器起名為Android。

Android的Logo是由Ascender公司設計的,誕生於2010年,其設計靈感源於男女廁所門上的圖形符號,於是布洛克繪製了一個簡單的機器人,它的軀幹就像錫罐的形狀,頭上還有兩根天線,Android小機器人便誕生了。其中的文字使用了Ascender公司專門製作的稱之為“Droid ” 的字型。Android是一個全身綠色的機器人,綠色也是Android的標誌。顏色採用了PMS 376C和RGB中十六進制的#A4C639來繪製,這是Android作業系統的品牌象徵。有時候,它們還會使用純文字的Logo。

2012年7月美國科技部落格網站BusinessInsider評選出二十一世紀十款最重要電子產品,Android作業系統和iPhone等榜上有名。

(Android logo 相關圖片相冊圖片來源:)

發展歷程

2003年10月,Andy Rubin等人創建Android公司,並組建Android團隊。

2005年8月17日,Google低調收購了成立僅22個月的高科技企業Android及其團隊。安迪魯賓成為Google公司工程部副總裁,繼續負責Android項目。

2007年11月5日,谷歌公司正式向外界展示了這款名為Android的作業系統,並且在這天谷歌宣布建立一個全球性的聯盟組織,該組織由34家手機製造商、軟體開發商、電信運營商以及晶片製造商共同組成,並與84家硬體製造商、軟體開發商及電信營運商組成開放手持設備聯盟(Open Handset Alliance)來共同研發改良Android系統,這一聯盟將支持谷歌發布的手機作業系統以及套用軟體,Google以Apache免費開源許可證的授權方式,發布了Android的原始碼。

2008年,在GoogleI/O大會上,谷歌提出了AndroidHAL架構圖,在同年8月18號,Android獲得了美國聯邦通信委員會(FCC)的批准,在2008年9月,谷歌正式發布了Android 1.0系統,這也是Android系統最早的版本。

2009年4月,谷歌正式推出了Android 1.5這款手機,從Android 1.5版本開始,谷歌開始將Android的版本以甜品的名字命名,Android 1.5命名為Cupcake(紙杯蛋糕)。該系統與Android 1.0相比有了很大的改進。

2009年9月份,谷歌發布了Android 1.6的正式版,並且推出了搭載Android 1.6正式版的手機HTC Hero(G3),憑藉著出色的外觀設計以及全新的Android 1.6作業系統,HTC Hero(G3)成為當時全球最受歡迎的手機。Android 1.6也有一個有趣的甜品名稱,它被稱為Donut(甜甜圈)。

2010年2月份,Linux核心開發者Greg Kroah-Hartman將Android的驅動程式從Linux核心“狀態樹”(“staging tree”)上除去,從此,Android與Linux開發主流將分道揚鑣。在同年5月份,谷歌正式發布了Android 2.2作業系統。谷歌將Android 2.2作業系統命名為Froyo,翻譯完名為凍優酪乳。

2010年10月份,谷歌宣布Android系統達到了第一個里程碑,即電子市場上獲得官方數字認證的Android套用數量已經達到了10萬個,Android系統的套用增長非常迅速。在2010年12月,谷歌正式發布了Android 2.3作業系統Gingerbread (薑餅)。

2011年1月,谷歌稱每日的Android設備新用戶數量達到了30萬部,到2011年7月,這個數字增長到55萬部,而Android系統設備的用戶總數達到了1.35億,Android系統已經成為智慧型手機領域占有量最高的系統。

2011年8月2日,Android手機已占據全球智慧型機市場48%的份額,並在亞太地區市場占據統治地位,終結了Symbian(塞班系統)的霸主地位,躍居全球第一。

2011年9月份,Android系統的套用數目已經達到了48萬,而在智慧型手機市場,Android系統的占有率已經達到了43%。繼續在排在移動作業系統首位。谷歌將會發布全新的Android 4.0作業系統,這款系統被谷歌命名為Ice Cream Sandwich(冰激凌三明治)。

2012年1月6日,谷歌Android Market已有10萬開發者推出超過40萬活躍的套用,大多數的應用程式為免費。Android Market應用程式商店目錄在新年首周周末突破40萬基準,距離突破30萬套用僅4個月。在2011年早些時候,Android Market從20萬增加到30萬套用也花了四個月。

2013年11月1日,Android4.4正式發布,從具體功能上講,Android4.4提供了各種實用小功能,新的Android系統更智慧型,添加更多的Emoji表情圖案,UI的改進也更現代,如全新的HelloiOS7半透明效果。

2015年27日,網路安全公司Zimperium研究人員警告,安卓(Android)存在“致命”安全漏洞,黑客傳送一封彩信便能在用戶毫不知情的情況下完全控制手機。

發行版本

測試版本

Android在正式發行之前,最開始擁有兩個內部測試版本,並且以著名的機器人名稱來對其進行命名,它們分別是:阿童木(AndroidBeta),發條機器人(Android 1.0)。後來由於涉及到著作權問題,谷歌將其命名規則變更為用甜點作為它們系統版本的代號的命名方法。甜點命名法開始於Android 1.5發布的時候。作為每個版本代表的甜點的尺寸越變越大,然後按照26個字母數序:紙杯蛋糕(Android 1.5),甜甜圈(Android 1.6),鬆餅(Android 2.0/2.1),凍優酪乳(Android 2.2),薑餅(Android 2.3),蜂巢(Android 3.0),冰激凌三明治(Android 4.0),果凍豆(Jelly Bean,Android4.1和Android 4.2),奇巧(KitKat,Android 4.4),棒棒糖(Lollipop,Android 5.0),棉花糖(Marshmallow,Android 6.0),牛軋糖(Nougat,Android 7.0)。

1.1

2008年9月發布的Android第一版。

1.5

Cupcake(紙杯蛋糕):2009年4月30日發布。

主要的更新如下:

拍攝/播放影片,並支持上傳到Youtube;支持立體聲藍牙耳機,同時改善自動配對性能;最新的採用WebKit技術的瀏覽器,支持複製/貼上和頁面中搜尋;GPS性能大大提高;提供螢幕虛擬鍵盤;主螢幕增加音樂播放器和相框widgets;應用程式自動隨著手機鏇轉;簡訊、Gmail、日曆,瀏覽器的用戶接口大幅改進,如Gmail可以批量刪除郵件;相機啟動速度加快,拍攝圖片可以直接上傳到Picasa;來電照片顯示。

1.6

Donut(甜甜圈):2009年9月15日發布。

主要的更新如下:

重新設計的Android Market手勢;支持CDMA網路;文字轉語音系統(Text-to-Speech);快速搜尋框;全新的拍照接口;查看應用程式耗電;支持虛擬私人網路(VPN);支持更多的螢幕解析度;支持OpenCore2媒體引擎;新增面向視覺或聽覺困難人群的易用性外掛程式。

2.0

2009年10月26日發布。

主要的更新如下:

最佳化硬體速度;"Car Home"程式;支持更多的螢幕解析度;改良的用戶界面;新的瀏覽器的用戶接口和支持HTML5;新的聯繫人名單;更好的白色/黑色背景比率;改進Google Maps3.1.2;支持Microsoft Exchange;支持內置相機閃光燈;支持數碼變焦;改進的虛擬鍵盤;支持藍牙2.1;支持動態桌面的設計。

Android 2.2/2.2.1 Froyo(凍優酪乳) :2010年5月20日發布。主要的更新如下:

整體性能大幅度的提升;3G網路共享功能;Flash的支持;App2sd功能;全新的軟體商店;更多的Web套用API接口的開發。

2.3.x

Gingerbread(薑餅) :2010年12月7日發布。

主要的更新如下:

增加了新的垃圾回收和最佳化處理事件;原生代碼可直接存取輸入和感應器事件、EGL/OpenGLES、OpenSL ES;新的管理視窗和生命周期的框架;支持VP8和WebM視頻格式,提供AAC和AMR寬頻編碼,提供了新的音頻效果器;支持前置攝像頭、SIP/VOIP和NFC(近場通訊);簡化界面、速度提升;更快更直觀的文字輸入;一鍵文字選擇和複製/粘帖;改進的電源管理系統;新的套用管理方式。

3.0

Honeycomb(蜂巢):2011年2月2日發布。

主要更新如下:

最佳化針對平板 ;全新設計的UI增強網頁瀏覽功能 ;in-app purchases功能。

3.1

Honeycomb(蜂巢) :2011年5月11日布發布。

版本主要更新如下:

經過最佳化的Gmail電子信箱 ;全面支持Google Maps ;將Android手機系統跟平板系統再次合併從而方便開發者;任務管理器可滾動,支持USB輸入設備(鍵盤、滑鼠等) ;支持Google TV.可以支持XBOX 360無線手柄;widget支持的變化,能更加容易的定製螢幕widget外掛程式。

3.2

Honeycomb(蜂巢):2011年7月13日發布。

版本更新如下:

支持7英寸設備;引入了套用顯示縮放功能。

4.0

Ice Cream Sandwich(冰激凌三明治):2011年10月19日在香港發布。

版本主要更新如下:

全新的UI;全新的Chrome Lite瀏覽器,有離線閱讀,16標籤頁,隱身瀏覽模式等;截圖功能;更強大的圖片編輯功能;自帶照片套用堪比Instagram,可以加濾鏡、加相框,進行360度全景拍攝,照片還能根據地點來排序;Gmail加入手勢、離線搜尋功能,UI更強大;新功能People:以聯繫人照片為核心,界面偏重滑動而非點擊,集成了Twitter、Linkedin、Google+等通訊工具。有望支持用戶自定義添加第三方服務;新增流量管理工具,可具體查看每個套用產生的流量,限制使用流量,到達設定標準後自動斷開網路。

4.1

Android 4.1Jelly Bean(果凍豆):2012年6月28日

新特性:

更快、更流暢、更靈敏;特效動畫的幀速提高至60fps,增加了三倍緩衝;增強通知欄;全新搜尋;搜尋將會帶來全新的UI、智慧型語音搜尋和Google Now三項新功能;桌面外掛程式自動調整大小;加強無障礙操作;語言和輸入法擴展;新的輸入類型和功能;新的連線類型。

4.2

Jelly Bean(果凍豆):

Android 4.22012年10月30日

Android 4.2沿用“果凍豆”這一名稱,以反映這種最新作業系統與Android 4.1的相似性,但Android 4.2推出了一些重大的新特性,具體如下:

Photo Sphere全景拍照功能;鍵盤手勢輸入功能;改進鎖屏功能,包括鎖屏狀態下支持桌面掛件和直接打開照相功能等;可擴展通知,允許用戶直接打開套用;Gmail郵件可縮放顯示;Daydream螢幕保護程式;用戶連點三次可放大整個顯示頻,還可用兩根手指進行鏇轉和縮放顯示,以及專為盲人用戶設計的語音輸出和手勢模式導航功能等;支持Miracast無線顯示共享功能;Google Now現可允許用戶使用Gamail作為新的數據來源,如改進後的航班追蹤功能、酒店和餐廳預訂功能以及音樂和電影推薦功能等。

4.4

Android 4.4KitKat(奇巧朱古力): 2013年下半年

2013年9月4日凌晨,谷歌對外公布了Android新版本Android 4.4KitKat(奇巧朱古力),並且於2013年11月01日正式發布,新的4.4系統更加整合了自家服務,力求防止安卓系統繼續碎片化、分散化。

5.0

Android 5.0Lollipop(棒棒糖):美國太平洋時間2014年10月15日

Android 5.0 系統使用一種新的Material Design設計風格。從圖片上就能看到一些全新的設計。從圖片上看,這套設計圖對 Android 系統的桌面圖示及部件的透明度進行的稍稍的調整,並且各種桌面小部件也可以重疊擺放。雖然調整桌面部件透明度對 Android 系統來說並不算什麼新鮮的功能,但是加入了透明度的改進。界面加入了五彩繽紛的顏色、流暢的動畫效果,呈現出一種清新的風格。採用這種設計的目的在於統一 Android 設備的外觀和使用體驗,不論是手機、平板還是多媒體播放器。

6.0

Android 6.0Marshmallow(棉花糖):2015年5月28日

新系統的整體設計風格依然保持扁平化的MeterialDesign風格。Android6.0在對軟體體驗與運行性能上進行了大幅度的最佳化。據測試,Android6.0可使設備續航時間提升30%。

7.0

Android 7.0Nougat(牛軋糖):2016年8月22日

8.0

Android Oreo (8.0):2017 年 8 月 21 日

系統架構

Android的系統架構和其作業系統一樣,採用了分層的架構。從架構圖看,Android分為四個層,從高層到低層分別是應用程式層、應用程式框架層、系統運行庫層和Linux核心層。

應用程式

Android會同一系列核心應用程式包一起發布,該應用程式包包括客戶端,SMS短訊息程式,日曆,地圖,瀏覽器,聯繫人管理程式等。所有的應用程式都是使用JAVA語言編寫的。

應用程式框架

開發人員也可以完全訪問核心應用程式所使用的API框架。該應用程式的架構設計簡化了組件的重用;任何一個應用程式都可以發布它的功能塊並且任何其它的應用程式都可以使用其所發布的功能塊(不過得遵循框架的安全性)。同樣,該應用程式重用機制也使用戶可以方便的替換程式組件。

隱藏在每個套用後面的是一系列的服務和系統, 其中包括;

豐富而又可擴展的視圖(Views),可以用來構建應用程式, 它包括列表(Lists),格線(Grids),文本框(Text boxes),按鈕(Buttons), 甚至可嵌入的web瀏覽器。

內容提供器(Content Providers)使得應用程式可以訪問另一個應用程式的數據(如聯繫人資料庫), 或者共享它們自己的數據

資源管理器(Resource Manager)提供 非代碼資源的訪問,如本地字元串,圖形,和布局檔案(Layout files )。

通知管理器 (Notification Manager) 使得應用程式可以在狀態欄中顯示自定義的提示信息。

活動管理器( Activity Manager) 用來管理應用程式生命周期並提供常用的導航回退功能。

系統運行庫

Android 包含一些C/C++庫,這些庫能被Android系統中不同的組件使用。它們通過 Android 應用程式框架為開發者提供服務。以下是一些核心庫:

* 系統 C 庫 - 一個從BSD繼承來的標準C系統函式館 Libc ), 它是專門為基於Embedded linux的設備定製的。

* 媒體庫 - 基於PacketVideo OpenCORE;該庫支持多種常用的音頻、視頻格式回放和錄製,同時支持靜態圖像檔案。編碼格式包括MPEG4, H.264, MP3, AAC, AMR, JPG, PNG 。

* Surface Manager - 對顯示子系統的管理,並且為多個應用程式提 供了2D和3D圖層的無縫融合。

* LibWebCore - 一個最新的web瀏覽器引擎用,支持Android瀏覽器和一個可嵌入的web視圖。

系統結構

系統核心

Android 是運行於Linux kernel之上,但並不是GNU/Linux。因為在一般GNU/Linux 里支持的功能,Android 大都沒有支持,包括Cairo、X11、Alsa、FFmpeg、GTK、Pango及Glibc等都被移除掉了。Android又以Bionic 取代Glibc、以Skia 取代Cairo、再以opencore取代FFmpeg等等。Android 為了達到商業套用,必須移除被GNU GPL授權證所約束的部份,例如Android將驅動程式移到 Userspace,使得Linux driver 與 Linux kernel徹底分開。Bionic/Libc/Kernel/ 並非標準的Kernel header files。Android 的 Kernel header 是利用工具由 Linux Kernel header 所產生的,這樣做是為了保留常數、數據結構與宏。

Android 的 Linux kernel控制包括安全(Security),存儲器管理(Memory Management),程式管理(Process Management),網路堆疊(Network Stack),驅動程式模型(Driver Model)等。下載Android源碼之前,先要安裝其構建工具 Repo來初始化源碼。Repo 是 Android 用來輔助Git工作的一個工具。

後綴簡介

APK是安卓套用的後綴,是AndroidPackage的縮寫,即Android安裝包(apk)。APK是類似Symbian Sis或Sisx的檔案格式。通過將APK檔案直接傳到Android模擬器或Android手機中執行即可安裝。apk檔案和sis一樣,把android sdk編譯的工程打包成一個安裝程式檔案,格式為apk。 APK檔案其實是zip格式,但後綴名被修改為apk,通過UnZip解壓後,可以看到Dex檔案,Dex是Dalvik VM executes的全稱,即Android Dalvik執行程式,並非Java ME的位元組碼而是Dalvik位元組碼。

APK檔案結構

一個APK檔案結構為:

1. META-INF\ (註:Jar檔案中常可以看到);

2. res\ (註:存放資源檔案的目錄) ;

3. AndroidManifest.xml (註:程式全局配置檔案) ;

4. classes.dex (註:Dalvik位元組碼);

5. resources.arsc (註:編譯後的二進制資源檔案)。

總結下我們發現Android在運行一個程式時首先需要UnZip,然後類似Symbian那樣直接執行安裝,和Windows Mobile中的PE檔案有區別,這樣做對於程式的保密性和可靠性不是很高,通過dexdump命令可以反編譯,但這樣做符合發展規律,微軟的 Windows Gadgets或者說WPF也採用了這種構架方式。

在Android平台中dalvik vm的執行檔案被打包為apk格式,最終運行時載入器會解壓然後獲取編譯後androidmanifest.xml檔案中的permission分支相關的安全訪問,但仍然存在很多安全限制,如果你將apk檔案傳到/system/app資料夾下會發現執行是不受限制的。

最終我們平時安裝的檔案可能不是這個資料夾,而在android rom中系統的apk檔案默認會放入這個資料夾,它們擁有著root許可權。

硬體抽像層

Android 的HAL(硬體抽像層)是能以封閉源碼形式提供硬體驅動模組。HAL 的目的是為了把 Android framework 與 Linux kernel 隔開,讓 Android 不至過度依賴 Linux kernel,以達成 Kernel independent 的概念,也讓 Android framework 的開發能在不考量驅動程式實現的前提下進行發展。

HAL stub 是一種代理人(Proxy)的概念,Stub 是以 *.so 檔的形式存在。Stub 向 HAL“提供”操作函式(Operations),並由 Android runtime 向 HAL 取得 Stub 的Operations,再 Callback 這些操作函式。HAL 里包含了許多的 Stub(代理人)。Runtime 只要說明“類型”,即 Module ID,就可以取得操作函式。

中介軟體

作業系統與應用程式的溝通橋樑,套用分為兩層:函式層(Library)和虛擬機(Virtual Machine)。 Bionic是 Android 改良libc的版本。Android 同時包含了Webkit,所謂的Webkit 就是Apple Safari 瀏覽器背後的引擎。Surface flinger 是就2D或3D的內容顯示到螢幕上。Android使用工具鏈(Toolchain)為Google自製的Bionic Libc。

Android採用OpenCORE作為基礎多媒體框架。Open CORE可分7大塊:PVPlayer、PVAuthor、Codec、PacketVideo Multimedia Framework(PVMF)、Operating System Compatibility Library(OSCL)、Common、OpenMAX。

Android 使用skia 為核心圖形引擎,搭配OpenGL/ES。skia與Linux Cairo功能相當,但相較於Linux Cairo, skia 功能還只是雛形的。2005年Skia公司被Google收購,2007年初,Skia GL源碼被公開,Skia 也是Google Chrome 的圖形引擎。

Android的多媒體資料庫採用SQLite資料庫系統。資料庫又分為共用資料庫及私用資料庫。用戶可通過ContentResolver類(Column)取得共用資料庫。

Android的中間層多以Java 實現,並且採用特殊的Dalvik 虛擬機(Dalvik Virtual Machine)。Dalvik虛擬機是一種“暫存器型態”(Register Based)的Java虛擬機,變數皆存放於暫存器中,虛擬機的指令相對減少。

Dalvik虛擬機可以有多個實例(Instance), 每個Android應用程式都用一個自屬的Dalvik虛擬機來運行,讓系統在運行程式時可達到最佳化。Dalvik 虛擬機並非運行Java位元組碼(Bytecode),而是運行一種稱為.dex格式的檔案。

安全許可權機制

Android本身是一個許可權分立的作業系統。在這類作業系統中,每個套用都以唯一的一個系統識別身份運行(Linux用戶ID與群組ID)。系統的各部分也分別使用各自獨立的識別方式。Linux就是這樣將套用與套用,套用與系統隔離開。

系統更多的安全功能通過許可權機制提供。許可權可以限制某個特定進程的特定操作,也可以限制每個URI許可權對特定數據段的訪問。

Android安全架構的核心設計思想是,在默認設定下,所有套用都沒有許可權對其他套用、系統或用戶進行較大影響的操作。這其中包括讀寫用戶隱私數據(聯繫人或電子郵件),讀寫其他套用檔案,訪問網路或阻止設備待機等。

安裝套用時,在檢查程式簽名提及的許可權,且經過用戶確認後,軟體包安裝器會給予套用許可權。從用戶角度看,一款Android套用通常會要求如下的許可權:

撥打電話、傳送簡訊或彩信、修改/刪除SD卡上的內容、讀取聯繫人的信息、讀取日程信的息,寫入日程數據、讀取電話狀態或識別碼、精確的(基於GPS)地理位置、模糊的(基於網路獲取)地理位置、創建藍牙連線、對網際網路的完全訪問、查看網路狀態,查看WiFi狀態、避免手機待機、修改系統全局設定、讀取同步設定、開機自啟動、重啟其他套用、終止運行中的套用、設定偏好套用、震動控制、拍攝圖片等。

一款套用應該根據自身提供的功能,要求合理的許可權。用戶也可以分析一款套用所需許可權,從而簡單判定這款套用是否安全。如一款套用是不帶廣告的單機版,也沒有任何附加的內容需要下載,那么它要求訪問網路的許可權就比較可疑。

套用組件

Android開發四大組件分別是:活動(Activity): 用於表現功能。服務(Service): 後台運行服務,不提供界面呈現。廣播接收器(BroadcastReceiver):用於接收廣播。內容提供商(Content Provider): 支持在多個套用中存儲和讀取數據,相當於資料庫。

活動

Android 中,Activity是所有程式的根本,所有程式的流程都運行在Activity 之中,Activity可以算是開發者遇到的最頻繁,也是Android 當中最基本的模組之一。在Android的程式當中,Activity 一般代表手機螢幕的一屏。如果把手機比作一個瀏覽器,那么Activity就相當於一個網頁。在Activity 當中可以添加一些Button、Check box 等控制項。可以看到Activity 概念和網頁的概念相當類似。

一般一個Android 套用是由多個Activity 組成的。這多個Activity 之間可以進行相互跳轉,例如,按下一個Button按鈕後,可能會跳轉到其他的Activity。和網頁跳轉稍微有些不一樣的是,Activity 之間的跳轉有可能返回值,例如,從Activity A 跳轉到Activity B,那么當Activity B 運行結束的時候,有可能會給Activity A 一個返回值。這樣做在很多時候是相當方便的。

當打開一個新的螢幕時,之前一個螢幕會被置為暫停狀態,並且壓入歷史堆疊中。用戶可以通過回退操作返回到以前打開過的螢幕。可以選擇性的移除一些沒有必要保留的螢幕,因為Android會把每個套用的開始到當前的每個螢幕保存在堆疊中。

(Android的套用圖冊圖片來源:)

服務

Service 是android 系統中的一種組件,它跟Activity 的級別差不多,但是他不能自己運行,只能後台運行,並且可以和其他組件進行互動。Service 是沒有界面的長生命周期的代碼。Service是一種程式,它可以運行很長時間,但是它卻沒有用戶界面。這么說有點枯燥,來看個例子。打開一個音樂播放器的程式,這個時候若想上網了,那么,打開Android瀏覽器,這個時候雖然已經進入了瀏覽器這個程式,但是,歌曲播放並沒有停止,而是在後台繼續一首接著一首的播放。其實這個播放就是由播放音樂的Service進行控制。當然這個播放音樂的Service也可以停止,例如,當播放列表裡邊的歌曲都結束,或者用戶按下了停止音樂播放的快捷鍵等。Service 可以在和多場合的套用中使用,比如播放多媒體的時候用戶啟動了其他Activity這個時候程式要在後台繼續播放,比如檢測SD 卡上檔案的變化,再或者在後台記錄地理信息位置的改變等等,總之服務嘛,總是藏在後頭的。

開啟Service有兩種方式:

(1) Context.startService():Service會經歷onCreate -> onStart(如果Service還沒有運行,則android先調用onCreate()然後調用onStart();如果Service已經運行,則只調用onStart(),所以一個Service的onStart方法可能會重複調用多次 );StopService的時候直接onDestroy,如果是調用者自己直接退出而沒有調用StopService的話,Service會一直在後台運行。該Service的調用者再啟動起來後可以通過stopService關閉Service。 注意,多次調用Context.startservice()不會嵌套(即使會有相應的onStart()方法被調用),所以無論同一個服務被啟動了多少次,一旦調用Context.stopService()或者StopSelf(),他都會被停止。補充說明:傳遞給StartService(0的Intent對象會傳遞給onStart()方法。調用順序為:onCreate --> onStart(可多次調用) --> onDestroy。

(2) Context.bindService():Service會經歷onCreate() -->onBind(),onBind將返回給客戶端一個IBind接口實例,IBind允許客戶端回調服務的方法,比如得到Service運行的狀態或其他操作。這個時候把調用者(Context,例如Activity)會和Service綁定在一起,Context退出了,Srevice就會調用onUnbind --> onDestroyed相應退出,所謂綁定在一起就共存亡了。

廣播接收器

在Android 中,Broadcast是一種廣泛運用的在應用程式之間傳輸信息的機制。而BroadcastReceiver 是對傳送出來的Broadcast進行過濾接受並回響的一類組件。可以使用BroadcastReceiver 來讓套用對一個外部的事件做出回響。這是非常有意思的,例如,當電話呼入這個外部事件到來的時候,可以利用BroadcastReceiver 進行處理。例如,當下載一個程式成功完成的時候,仍然可以利用BroadcastReceiver 進行處理。BroadcastReceiver不能生成UI,也就是說對於用戶來說不是透明的,用戶是看不到的。BroadcastReceiver通過NotificationManager 來通知用戶這些事情發生了。BroadcastReceiver 既可以在AndroidManifest.xml 中註冊,也可以在運行時的代碼中使用Context.registerReceiver()進行註冊。只要是註冊了,當事件來臨的時候,即使程式沒有啟動,系統也在需要的時候啟動程式。各種套用還可以通過使用Context.sendBroadcast () 將它們自己的Intent Broadcasts廣播給其他應用程式。

內容提供

Content Provider 是Android提供的第三方套用數據的訪問方案。

在Android中,對數據的保護是很嚴密的,除了放在SD卡中的數據,一個套用所持有的資料庫、檔案等內容,都是不允許其他直接訪問的。Andorid當然不會真的把每個套用都做成一座孤島,它為所有套用都準備了一扇窗,這就是Content Provider。套用想對外提供的數據,可以通過派生Content Provider類, 封裝成一枚Content Provider,每個Content Provider都用一個uri作為獨立的標識,形如:content://com.xxxxx。所有東西看著像REST的樣子,但實際上,它比REST 更為靈活。和REST類似,uri也可以有兩種類型,一種是帶id的,另一種是列表的,但實現者不需要按照這個模式來做,給id的uri也可以返回列表類型的數據,只要調用者明白,就無妨,不用苛求所謂的REST。

平台優勢

開放性

在優勢方面,Android平台首先就是其開放性,開發的平台允許任何移動終端廠商加入到Android聯盟中來。顯著的開放性可以使其擁有更多的開發者,隨著用戶和套用的日益豐富,一個嶄新的平台也將很快走向成熟。

開放性對於Android的發展而言,有利於積累人氣,這裡的人氣包括消費者和廠商,而對於消費者來講,最大的受益正是豐富的軟體資源。開放的平台也會帶來更大競爭,如此一來,消費者將可以用更低的價位購得心儀的手機。

豐富的硬體

這一點還是與Android平台的開放性相關,由於Android的開放性,眾多的廠商會推出千奇百怪,功能特色各具的多種產品。功能上的差異和特色,卻不會影響到數據同步、甚至軟體的兼容,如同從諾基亞Symbian風格手機一下改用蘋果iPhone,同時還可將Symbian中優秀的軟體帶到iPhone上使用、聯繫人等資料更是可以方便地轉移。

方便開發

Android平台提供給第三方開發商一個十分寬泛、自由的環境,不會受到各種條條框框的阻擾,可想而知,會有多少新穎別致的軟體會誕生。但也有其兩面性,血腥、暴力、情色方面的程式和遊戲如何控制正是留給Android難題之一。

Google套用

在網際網路的Google已經走過10年度歷史,從搜尋巨人到全面的網際網路滲透,Google服務如地圖、郵件、搜尋等已經成為連線用戶和網際網路的重要紐帶,而Android平台手機將無縫結合這些優秀的Google服務。

相關詞條

熱門詞條