ANDROID

ANDROID

Google公司開發的操作系統
Android是一種基于Linux的自由及開放源代碼的操作系統,主要使用于移動設備,如智能手機和平闆電腦,由Google公司和開放手機聯盟領導及開發。尚未有統一中文名稱,中國大陸地區較多人使用“安卓”或“安智”。Android操作系統最初由Andy Rubin開發,主要支持手機。2005年7月由Google收購注資。2007年11月,Google與84家硬件制造商、軟件開發商及電信營運商組建開放手機聯盟共同研發改良Android系統。随後Google以Apache開源許可證的授權方式,發布了Android的源代碼。第一部Android智能手機發布于2008年10月。Android逐漸擴展到平闆電腦及其他領域上,如電視、數碼相機、遊戲機等。2011年第一季度,Android在全球的市場份額首次超過塞班系統,躍居全球第一。2013年的第四季度,Android平台手機的全球市場份額已經達到78.1%。2013年09月24日谷歌開發的操作系統Android在迎來了5歲生日,全世界采用這款系統的設備數量已經達到10億台。
    中文名:安卓 外文名:Android 别名: 開發者:Google、開放手持設備聯盟 發行商:Google 上市時間:2008年9月23日 運行系統:類Unix,Linux 源碼類型:自由及開放源代碼軟件 開發商:Google、開放手持設備聯盟 編程語言:C/C++(底層) Java等(應用層)

系統簡介

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等榜上有名。

發展曆程

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萬應用也花了四個月。

發行版本

測試版本

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,4.1和Android 4.2)。

Android1.1

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

Android1.5

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

主要的更新:拍攝/播放影片,并支持上傳到Youtube;支持立體聲藍牙耳機,同時改善自動配對性能;最新的采用WebKit技術的浏覽器,支持複制/貼上和頁面中搜索;GPS性能大大提高;提供屏幕虛拟鍵盤;主屏幕增加音樂播放器和相框widgets;應用程序自動随着手機旋轉;短信、Gmail、日曆,浏覽器的用戶接口大幅改進,如Gmail可以批量删除郵件;相機啟動速度加快,拍攝圖片可以直接上傳到Picasa;來電照片顯示。

Android1.6

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

主要的更新:重新設計的Android Market手勢;支持CDMA網絡;文字轉語音系統(Text-to-Speech);快速搜索框;全新的拍照接口;查看應用程序耗電;支持虛拟私人網絡(VPN);支持更多的屏幕分辨率;支持OpenCore2媒體引擎;新增面向視覺或聽覺困難人群的易用性插件。

Android2.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接口的開發。

Android2.3.x

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

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

Android3.0

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

主要更新:優化針對平闆 ;全新設計的UI增強網頁浏覽功能 ;in-app purchases功能。

Android3.1

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

版本主要更新:經過優化的Gmail電子郵箱 ;全面支持Google Maps ;将Android手機系統跟平闆系統再次合并從而方便開發者;任務管理器可滾動,支持USB輸入設備(鍵盤、鼠标等) ;支持Google TV.可以支持XBOX 360無線手柄;widget支持的變化,能更加容易的定制屏幕widget插件。

Android3.2

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

版本更新:支持7英寸設備;引入了應用顯示縮放功能。

Android4.0

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

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

Android4.1

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

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

Android4.2

Android 4.2Jelly Bean(果凍豆):2012年10月30日

Android 4.2沿用“果凍豆”這一名稱,以反映這種最新操作系統與Android 4.1的相似性,但Android 4.2推出了一些重大的新特性,具體如下:Photo Sphere全景拍照功能;鍵盤手勢輸入功能;改進鎖屏功能,包括鎖屏狀态下支持桌面挂件和直接打開照相功能等;可擴展通知,允許用戶直接打開應用;Gmail郵件可縮放顯示;Daydream屏幕保護程序;用戶連點三次可放大整個顯示頻,還可用兩根手指進行旋轉和縮放顯示,以及專為盲人用戶設計的語音輸出和手勢模式導航功能等;支持Miracast無線顯示共享功能;Google Now現可允許用戶使用Gamail作為新的數據來源,如改進後的航班追蹤功能、酒店和餐廳預訂功能以及音樂和電影推薦功能等。

Android4.4

Android 4.4KitKat(奇巧巧克力): 待定

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

系統架構

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 之間的跳轉有可能返回值,例如,從Ac-tivity A 跳轉到Activity B,那麼當Activity B 運行結束的時候,有可能會給Activity A 一個返回值。這樣做在很多時候是相當方便的。

當打開一個新的屏幕時,之前一個屏幕會被置為暫停狀态,并且壓入曆史堆棧中。用戶可以通過回退操作返回到以前打開過的屏幕。可以選擇性的移除一些沒有必要保留的屏幕,因為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服務。

相關詞條

相關搜索

其它詞條