成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

谷歌安卓開發指南

移動開發 Android
安卓是一種以Linux為基礎的開放源碼操作系統,主要使用于便攜設備。目前尚未有統一中文名稱,中國大陸地區較多人使用“安卓”。安卓被谷歌收購之后,發展迅速,谷歌安卓開發已經成為手機開發中最重要的一個平臺。

安卓操作系統最初由Andy Rubin開發,最初主要支持手機。2005年由Google收購注資,并組建開放手機聯盟開發改良,逐漸擴展到平板電腦及其他領域上。安卓的主要競爭對手是蘋果公司的iOS以及RIM的Blackberry OS。2011年第一季度,安卓在全球的市場份額首次超過塞班系統,躍居全球第一。 2012年2月數據,安卓占據全球智能手機操作系統市場52.5%的份額,中國市場占有率為68.4%。

安卓用甜點作為它們系統版本的代號的命名方法開始于 安卓 1.5 發布的時候。作為每個版本代表的甜點的尺寸越變越大,然后按照26個字母數序:紙杯蛋糕,甜甜圈,松餅,凍酸奶,姜餅,蜂巢,冰激凌三明治,根據最新消息新一代安卓版本將命名為果凍豆(Jelly Bean)。

架構

谷歌安卓的系統架構和其它操作系統一樣,采用了分層的架構。從架構圖看,谷歌安卓分為四個層,從高層到低層分別是應用程序層、應用程序框架層、系統運行庫層和linux核心層。

谷歌安卓是以Linux為核心的手機操作平臺,作為一款開放式的操作系統,隨著谷歌安卓的快速發展,如今已允許開發者使用多種編程語言來開發谷歌安卓應用程序,而不再是以前只能使用Java開發谷歌安卓應用程序的單一局面,因而受到眾多開發者的歡迎,成為真正意義上的開放式操作系統。

在谷歌安卓中,開發者可以使用Java作為編程語言來開發應用程序,也可以通過NDK使用C/C++作為編程語言來開發應用程序,也可使用SL4A來使用其他各種腳本語言進行編程(如:python、lua、tcl、php等等),還有其他諸如:Qt(qt for 谷歌安卓)、Mono(mono for 谷歌安卓)等一些著名編程框架也開始支持谷歌安卓編程,甚至通過MonoDroid,開發者還可以使用C#作為編程語言來開發應用程序。另外,谷歌還在2009年特別發布了針對初學者的谷歌安卓 Simple語言,該語言類似Basic語言。而在網頁編程語言方面,JavaScript,ajax,HTML5,jquery、sencha、dojo、mobl、PhoneGap等等都已經支持谷歌安卓開發。

而在谷歌安卓系統底層方面,谷歌安卓使用C/C++作為開發語言。

應用程序(部分)

早期的谷歌安卓應用程序開發,通常通過谷歌安卓 SDK(谷歌安卓軟件開發包)下使用Java作為編程語言來開發應用程序,但通過不同的軟件開發包,則使用的編程語言也不同。

例如開發者可以通過谷歌安卓 NDK(谷歌安卓 Native開發包)使用C語言或者C++語言來作為編程語言開發應用程序。同時谷歌還推出了適合初學者編程使用的Simple語言,該語言類似微軟公司的Visual Basic語言。此外,谷歌公司還推出了Google App Inventor開發工具,該開發工具可以快速地構建應用程序,方便新手開發者。

Java開發方面

谷歌安卓支持使用Java作為編程語言來開發應用程序,而谷歌安卓的Java開發方面從接口到功能,都有層出不窮的變化。考慮到Java虛擬機的效率和資源占用,谷歌重新設計了谷歌安卓的Java,以便能提高效率和減少資源占用,因而與J2ME等不同。 谷歌安卓結構其中Activity等同于J2ME的MIDlet,一個 Activity 類(Class)負責創建視窗(Windows),一個活動中的Activity就是在 foreground(前景)模式,背景運行的程序叫做Service。兩者之間通過由ServiceConnection和AIDL連結,達到復數程序同時運行效果。如果運行中的 Activity 全部畫面被其他 Activity 取代時,該 Activity 便被停止(Stopped),甚至被系統清除(Kill)。

View等同于J2ME的Displayable,程序人員可以通過 View 類與“XML layout”檔將UI放置在視窗上,谷歌安卓 1.5的版本可以利用 View 打造出所謂的 Widgets,其實Widget只是View的一種,所以可以使用xml來設計layout,HTC的谷歌安卓 Hero手機即含有大量的widget。至于ViewGroup 是各種layout 的基礎抽象類(abstract class),ViewGroup之內還可以有ViewGroup。View的構造函數不需要再Activity中調用,但是Displayable的是必須的,在Activity 中,要通過findViewById()來從XML 中取得View,谷歌安卓的View類的顯示很大程度上是從XML中讀取的。View 與事件(event)息息相關,兩者之間通過Listener 結合在一起,每一個View都可以注冊一個event listener,例如:當View要處理用戶觸碰(touch)的事件時,就要向谷歌安卓框架注冊View.OnClickListener。另外還有BitMap等同于J2ME的Image。

C/C++開發方面

早期的谷歌安卓開發只支持Java作為編程語言開發應用程序,因而使得其他語言開發者只能望而卻步。2010年4月,谷歌正式對開發者發布了谷歌安卓 NDK,NDK允許開發者使用C/C++作為編程語言來為谷歌安卓開發應用程序,初版的NDK使得開發者看到了C/C++在谷歌安卓開發中的希望。

但是,當前版本的NDK在功能上還有很多局限性:NDK并沒有提供對應用程序生命周期的維護;NDK也不提供對谷歌安卓系統中大量系統事件的支持;對于作為應用程序交互接口的UI API,當前版本的NDK中也沒有提供。但是相對于初版的NDK,現在的NDK已經進行了許多重大的功能改進。

由此可見,NDK仍然需要完善和發展,相信未來隨著NDK的發展,NDK可以做得更多更好。

中介軟件

操作系統與應用程序的溝通橋梁,應用分為兩層:函數層(Library)和虛擬機(Virtual Machine)。 Bionic是 谷歌安卓 改良libc的版本。谷歌安卓 同時包含了Webkit,所謂的Webkit 就是Apple Safari 瀏覽器背后的引擎。Surface flinger 是就2D或3D的內容顯示到屏幕上。谷歌安卓使用工具鏈(Toolchain)為Google自制的Bionic Libc。

谷歌安卓采用OpenCORE作為基礎多媒體框架。OpenCORE可分7大塊:PVPlayer、PVAuthor、Codec、PacketVideo Multimedia Framework(PVMF)、Operating System Compatibility Library(OSCL)、Common、OpenMAX。

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

谷歌安卓的多媒體數據庫采用SQLite數據庫系統。數據庫又分為共用數據庫及私用數據庫。用戶可通過ContentResolver類(Column)取得共用數據庫。

谷歌安卓的中間層多以Java 實現,并且采用特殊的Dalvik 虛擬機(Dalvik Virtual Machine)。Dalvik虛擬機是一種“暫存器型態”(Register Based)的Java虛擬機,變量皆存放于暫存器中,虛擬機的指令相對減少。

Dalvik虛擬機可以有多個實例(instance), 每個谷歌安卓應用程序都用一個自屬的Dalvik虛擬機來運行,讓系統在運行程序時可達到優化。Dalvik 虛擬機并非運行Java字節碼(Bytecode),而是運行一種稱為.dex格式的文件。

硬件抽像層

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

HAL stub 是一種代理人(proxy)的概念,stub 是以 *.so 檔的形式存在。Stub 向 HAL“提供”操作函數(operations),并由 谷歌安卓 runtime 向 HAL 取得 stub 的 operations,再 callback 這些操作函數。HAL 里包含了許多的 stub(代理人)。Runtime 只要說明“類型”,即 module ID,就可以取得操作函數。

內核

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

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

安全權限機制

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

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

谷歌安卓安全架構的核心設計思想是,在默認設置下,所有應用都沒有權限對其他應用、系統或用戶進行較大影響的操作。這其中包括讀寫用戶隱私數據(聯系人或電子郵件),讀寫其他應用文件,訪問網絡或阻止設備待機等。

安裝應用時,在檢查程序簽名提及的權限,且經過用戶確認后,軟件包安裝器會給予應用權限。從用戶角度看,一款谷歌安卓應用通常會要求如下的權限:

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

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

組件

技術內容:本系統主要由四個部分組成,即谷歌安卓四大組件,分別是:活動(Activity): 用于表現功能。服務(Service): 相當于后臺運行的Activity。廣播接收器(BroadcastReceiver):用于接收廣播。內容提供商(Content Provider): 支持在多個應用中存儲和讀取數據,相當于數據庫。

1 Activity

谷歌安卓 中,Activity 是所有程序的根本,所有程序的流程都運行在Activity 之中,Activity可以算是開發者遇到的最頻繁,也是谷歌安卓 當中最基本的模塊之一。在谷歌安卓的程序當中,Activity 一般代表手機屏幕的一屏。如果把手機比作一個瀏覽器,那么Acitivity就相當于一個網頁。在Activity 當中可以添加一些Button、Check box 等控件??梢钥吹紸ctivity 概念和網頁的概念相當類似。

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

當打開一個新的屏幕時,之前一個屏幕會被置為暫停狀態,并且壓入歷史堆棧中。用戶可以通過回退操作返回到以前打開過的屏幕。我們可以選擇性的移除一些沒有必要保留的屏幕,因為谷歌安卓 會把每個應用的開始到當前的每一個屏幕保存在堆棧中。Activity 是由谷歌安卓 系統進行維護的,它也有自己的生命周期,即它的一個產生、運行、銷毀的一個周期,對于Activity,關鍵是其生命周期的把握,其次就是狀態的保存和恢復(onSaveInstanceState onRestoreInstanceState),以及Activity 之間的跳轉和數據傳輸(intent)。

2 Service

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

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

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

3 BroadcastReceiver

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

(1)在谷歌安卓Manifest.xml進行注冊

 

 

這種方法有一個特點即使你的應用程序已經關閉了,但這個BroadcastReceiver依然會接受廣播出來的對象,也就是說無論你這個應用程序時開還是關都屬于活動狀態都可以接受到廣播的事件

(2)在代碼中注冊廣播

//實例化廣播接收器對象

BroadcastReceiver bcr = new BroadcastReceiver(){

public void onReceive(Context context, Intent intent) {

Log.d("test", "^-^, Have received Massage!");

}

};

IntentFilter filter=new IntentFilter();

filter.addAction(“XXX”);

this.registerReceiver(bcr, filter);

第一種俗稱靜態注冊,第二種俗稱動態注冊,這兩種注冊BroadcastReceiver的區別:

動態注冊較靜態注冊靈活。實驗證明:當靜態注冊一個BroadcastReceiver時,不論應用程序是啟動與否。都可以接受對應的廣播。

動態注冊的時候,如果不執行unregisterReceiver();方法取消注冊,跟靜態是一樣的。但是如果執行該方法,當執行過以后,就不能接受廣播了。

4 Content Provider

Content Provider,聽著就和數據相關,沒錯,這就是谷歌安卓提供的第三方應用數據的訪問方案。在谷歌安卓中,對數據的保護是很嚴密的,除了放在SD卡中的數據,一個應用所持有的數據庫、文件、等等內容,都是不允許其他直接訪問的,但有時候,溝通是必要的,不僅對第三方很重要,對應用自己也很重要。

Andorid當然不會真的把每個應用都做成一座孤島,它為所有應用都準備了一扇窗,這就是Content Provider。應用想對外提供的數據,可以通過派生ContentProvider類, 封裝成一枚Content Provider,每個Content Provider都用一個uri作為獨立的標識,形如:content://com.xxxxx。所有東西看著像REST的樣子,但實際上,它比REST 更為靈活。和REST類似,uri也可以有兩種類型,一種是帶id的,另一種是列表的,但實現者不需要按照這個模式來做,給你id的uri你也可以返回列表類型的數據,只要調用者明白,就無妨,不用苛求所謂的REST。

另外,Content Provider不和REST一樣只有uri可用,還可以接受Projection,Selection,OrderBy等參數,這樣,就可以像數據庫那樣進行投影,選擇和排序。查詢到的結果,以Cursor(參見:reference/android/database/Cursor.html )的形式進行返回,調用者可以移動Cursor來訪問各列的數據。

Content Provider屏蔽了內部數據的存儲細節,向外提供了上述統一的接口模型,這樣的抽象層次,大大簡化了上層應用的書寫,也對數據的整合提供了更方便的途徑。Content Provider內部,常用數據庫來實現,谷歌安卓提供了強大的Sqlite支持,但很多時候,你也可以封裝文件或其他混合的數據。

在谷歌安卓中,ContentResolver是用來發起Content Provider的定位和訪問的。不過它僅提供了同步訪問的Content Provider的接口。但通常,Content Provider需要訪問的可能是數據庫等大數據源,效率上不足夠快,會導致調用線程的擁塞。因此谷歌安卓提供了一個AsyncQueryHandler(參見:reference/android/content/AsyncQueryHandler.html),幫助進行異步訪問Content Provider。

在各大組件中,Service和Content Provider都是那種需要持續訪問的。Service如果是一個耗時的場景,往往會提供異步訪問的接口,而Content Provider不論效率如何,都提供的是約定的同步訪問接口。我想這遵循的就是場景導向設計的原則,因為Content Provider僅是提供數據訪問的,它不能確信具體的使用場景如何,會怎樣使用它的數據;而相比之下,Service包含的邏輯更復雜更完整,可以抉擇大部分時候使用某接口的場景,從而確定最貼切的接口是同步還是異步,簡化了上層調用的邏輯。

責任編輯:佚名 來源: 互聯網整理
相關推薦

2011-07-25 16:21:22

Sencha touc

2011-09-22 14:39:17

API

2012-03-26 09:44:32

安卓開發配置Eclipse

2022-08-02 08:01:09

開發插件Chrome前端技術

2011-06-09 18:24:36

QT Wince

2023-05-15 18:44:07

前端開發

2012-03-28 09:40:55

安卓開發入門教程視頻

2009-06-24 16:30:21

JSF組件模型

2012-03-28 10:37:55

谷歌安卓開發工具AppInventor

2015-11-12 16:14:52

Python開發實踐

2015-12-16 10:30:18

前端開發指南

2010-06-13 09:27:56

Widget開發

2019-10-31 08:00:00

機器學習人工智能AI

2021-08-09 09:47:34

Blazor 路由開發

2011-12-29 10:48:49

移動Web

2011-04-18 11:00:34

使用音頻BlackBerry

2012-05-18 10:08:56

TitaniumAndroid

2021-06-21 15:21:52

鴻蒙HarmonyOS應用開發

2011-08-02 17:58:09

iPhone開發 事件

2022-03-23 15:17:00

Harmony鴻蒙操作系統
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 国产精品久久久 | 日韩精品一区二区三区视频播放 | 亚洲欧美综合精品久久成人 | 精品一级 | 亚洲综合大片69999 | 成人免费小视频 | 国产成人福利视频在线观看 | 国产成人精品网站 | 久www| 国产精品久久久亚洲 | 亚洲精品亚洲人成人网 | 国产一级视频在线播放 | 国产欧美久久精品 | 国产精品美女久久久久久免费 | 国产黄色大片 | 欧美a级成人淫片免费看 | 精品欧美一区二区三区久久久小说 | 亚洲永久在线 | 日韩视频一区二区 | 国产伦一区二区三区四区 | 久久综合狠狠综合久久综合88 | 国产a一区二区 | 在线亚洲一区 | 国产精品一区二区三区四区 | 成人在线观看免费爱爱 | 日韩精品一区二区三区在线观看 | 91精品国产91久久久久久 | 国产精品一区二区三区在线 | 国产精品久久九九 | 亚洲性人人天天夜夜摸 | 亚洲视频免费 | 亚洲视频免费观看 | 伦理午夜电影免费观看 | 福利视频网址 | 一区欧美 | 国产精品成人一区二区 | 免费观看一级特黄欧美大片 | 国产日韩欧美在线播放 | 精品福利在线 | 精品一级 | 男女视频在线免费观看 |