版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 中文6000字</b></p><p><b> 附錄A 譯文</b></p><p><b> 安卓應(yīng)用基礎(chǔ)</b></p><p> 在Java編程語言編寫的Android應(yīng)用程序的Android的SDK工具編譯代碼以及與任何數(shù)據(jù)和到一個Android的包,一
2、個歸檔文件檔案資源的.apk后綴,所有的在一個單一的代碼.apk文件被認(rèn)為是一個應(yīng)用程序,是Android的文件,供電設(shè)備來安裝應(yīng)用程序。</p><p> 一旦安裝在設(shè)備上,每個Android應(yīng)用程序的生命在它自己的安全沙箱:</p><p> 而Android操作系統(tǒng)是一個多用戶Linux系統(tǒng)中,每個應(yīng)用程序是一個不同的用戶。</p><p> 默認(rèn)情況下
3、,每個應(yīng)用程序的系統(tǒng)分配一個唯一的Linux用戶ID(該ID僅用于由系統(tǒng)是未知的應(yīng)用程序),系統(tǒng)設(shè)置所有的應(yīng)用程序中的文件權(quán)限,以便只有用戶ID分配給該應(yīng)用程序可以訪問它們。</p><p> 每個進(jìn)程都有它自己的虛擬機(jī)(VM),因此應(yīng)用程序的代碼在從其他應(yīng)用程序隔離運行。</p><p> 默認(rèn)情況下,每個應(yīng)用程序運行在它自己的Linux進(jìn)程。Android的啟動過程時,應(yīng)用程序的任
4、何組件需要被執(zhí)行,然后關(guān)閉該進(jìn)程時,它不再需要或恢復(fù)時,系統(tǒng)必須為其他應(yīng)用程序的內(nèi)存。</p><p> 這樣一來,Android系統(tǒng)實現(xiàn)了最小特權(quán)原則,也就是說,每個應(yīng)用程序,默認(rèn)情況下,只能訪問的組件,它需要做的工作,沒有更多,這將創(chuàng)建一個非常安全的環(huán)境,使應(yīng)用程序無法訪問的,這就是它沒有給予許可制度的部分。</p><p> 但是,有一個應(yīng)用程序的方法與其他應(yīng)用程序和應(yīng)用程序訪問
5、系統(tǒng)服務(wù)的數(shù)據(jù):</p><p> 這有可能為兩個應(yīng)用程序安排共享相同的Linux用戶ID,在這種情況下,它們能夠相互訪問的文件。為了節(jié)約使用相同的用戶ID系統(tǒng)資源,應(yīng)用程序還可以安排運行在相同的Linux進(jìn)程和共享同一個VM(應(yīng)用也必須使用相同的證書簽名)。</p><p> 應(yīng)用程序可以請求訪問權(quán)限,如用戶的聯(lián)系人,短信,可安裝存儲(SD卡),攝像頭,藍(lán)牙等設(shè)備的數(shù)據(jù),所有應(yīng)用程序
6、的權(quán)限必須由用戶在安裝時授予。 </p><p> 這涵蓋了基本就如何Android應(yīng)用程序在系統(tǒng)中存在這個文件的其余部分向您介紹:</p><p> 1、框架的核心組件定義應(yīng)用程序。</p><p> 2、清單文件中聲明組件和應(yīng)用程序所需的設(shè)備功能。</p><p> 3、資源是從應(yīng)用程序代碼分開,并允許您的應(yīng)用程序正常
7、優(yōu)化的設(shè)備配置各種其行為。</p><p> 應(yīng)用程序組件(Application Components)</p><p> Android的核心功能之一就是一個應(yīng)用程序可以使用其它應(yīng)用程序的元素(如果那個應(yīng)用程序允許的話)。比如說,如果你的應(yīng)用程序需要一個圖片卷動列 表,而另一個應(yīng)用程序已經(jīng)開發(fā)了一個合用的而又允許別人使用的話,你可以直接調(diào)用那個卷動列表來完成工作,而不用自
8、己再開發(fā)一個。你的應(yīng)用程序并沒有吸納 或鏈接其它應(yīng)用程序的代碼,它只是在有需求的時候啟動了其它應(yīng)用程序的那個功能部分。</p><p> 為達(dá)到這個目的,系統(tǒng)必須在一個應(yīng)用程序的一部分被需要時啟動這個應(yīng)用程序,并將那個部分的Java對象實例化。與在其它系統(tǒng)上的應(yīng)用程序不同,Android應(yīng)用程序沒有為應(yīng)用準(zhǔn)備一個單獨的程序入口(比如說,沒有main()方法), 而是為系統(tǒng)依照需求實例化提供了
9、基本的組件。共有四種組件類型:</p><p> 活動(Activities)</p><p> 一個 activity 代表用戶界面的一個獨立屏幕。例如,一個郵件應(yīng)用程序應(yīng)該有一個 activity 用于顯示新郵件列表,另一個 activity 用于撰寫一封郵件,還有一個 activity 用于讀取郵件。盡管所有 activitie 協(xié)同工作以構(gòu)成郵件應(yīng)用程序的用
10、戶體驗,但彼此之間相對獨立。應(yīng)次,不同的應(yīng)用程序能夠從任何一個 activity 啟動 (只要郵件應(yīng)用程序允許)。例如,用戶需要分享一張照片,一個拍照應(yīng)用程序能夠啟動郵件應(yīng)用程序的 activity 。</p><p> activity 是一個實現(xiàn)了 Activity 的子類,你可以在 Activities 開發(fā)者指導(dǎo)部分了解更多。</p><p&g
11、t; 服務(wù)(Services)</p><p> service 是在后臺運行,執(zhí)行長時間操作或者執(zhí)行遠(yuǎn)程操作。 service 不提供用戶界面。例如,當(dāng)用戶在另一個應(yīng)用程序時,一個 service 可在后臺播放音樂,或者是從網(wǎng)絡(luò)上獲取數(shù)據(jù),而不阻斷用戶與當(dāng)前 activity 的交互。其他組件,比如一個 activity ,為了與該 service 互動,可以啟動或者 綁定它。</p>
12、<p> service 是一個實現(xiàn)了 Service 的子類,你可以在 Services 開發(fā)者指導(dǎo)部分了解更多。</p><p> 廣播接收器(Broadcast receivers)</p><p> 廣播接收器是一個專注于接收廣播通知信息,并做出對應(yīng)處理的組件。很多廣播是源自于系統(tǒng)代碼的──比如,通知時區(qū)改變、電
13、池電量低、拍攝了一張照片或者用戶改變了語言選項。應(yīng)用程序也可以進(jìn)行廣播──比如說,通知其它應(yīng)用程序一些數(shù)據(jù)下載完成并處于可用狀態(tài)。</p><p> 應(yīng)用程序可以擁有任意數(shù)量的廣播接收器以對所有它感興趣的通知信息予以響應(yīng)。所有的接收器均繼承自BroadcastReceiver基類。</p><p> 廣播接收器沒有用戶界面。然而,它們可以啟動一個activity來響應(yīng)它們收到的信息,或
14、者用NotificationManager來通知用戶。通知可以用很多種方式來吸引用戶的注意力──閃動背燈、震動、播放聲音等等。一般來說是在狀態(tài)欄上放一個持久的圖標(biāo),用戶可以打開它并獲取消息。</p><p> 內(nèi)容提供者(Content providers)</p><p> 內(nèi)容提供者將一些特定的應(yīng)用程序數(shù)據(jù)供給其它應(yīng)用程序使用。數(shù)據(jù)可以存儲于文件系統(tǒng)、SQLite數(shù)據(jù)庫或其它方式。
15、內(nèi)容提供者繼承于ContentProvider 基類,為其它應(yīng)用程序取用和存儲它管理的數(shù)據(jù)實現(xiàn)了一套標(biāo)準(zhǔn)方法。然而,應(yīng)用程序并不直接調(diào)用這些方法,而是使用一個ContentResolver 對象,調(diào)用它的方法作為替代。ContentResolver可以與任意內(nèi)容提供者進(jìn)行會話,與其合作來對所有相關(guān)交互通訊進(jìn)行管理。</p><p> 參閱獨立的內(nèi)容提供者Content Providers
16、160;章節(jié)獲得更多關(guān)于使用內(nèi)容提供者的內(nèi)容。</p><p> 每當(dāng)出現(xiàn)一個需要被特定組件處理的請求時,Android會確保那個組件的應(yīng)用程序進(jìn)程處于運行狀態(tài),或在必要的時候啟動它。并確保那個相應(yīng)組件的實例的存在,必要時會創(chuàng)建那個實例。</p><p> Android系統(tǒng)設(shè)計的一個獨特方面是任何的一個程序都可以啟動另一程序的組件。比如,你想讓你的程序可以使用照相機(jī)拍照,如果已經(jīng)有了
17、實現(xiàn)這種功能的程序并且你你的程序能使用它(有權(quán)限),那么你就沒有再要再寫一個新的Activity來實現(xiàn)這個功能。你的程序不需要包含或者鏈接這個拍照程序。相反,你只需要在你的程序中打開這個拍照程序中的實現(xiàn)拍照功能的Activity。當(dāng)拍完之后,拍好的照片甚至?xí)詣臃祷亟o你的程序。者對于用戶來說,就好像是想拍照功能的程序就是你的這個程序的一部分一樣。</p><p> 當(dāng)系統(tǒng)啟動一個組件之后,如果這個組件所在的程序
18、之前沒有運行的話,系統(tǒng)會自動開始這個程序的進(jìn)程,并初始化這個組件所需要的相關(guān)類。比如,你的程序開啟了一個拍照功能程序的Activity,這時系統(tǒng)會啟動這個Activity所在的程序,所以這個Activity運行在拍照功能的程序當(dāng)中,而不是在你的程序中。所以,不像其他操作系統(tǒng)的中的程序一樣,Android程序沒有一個單獨的入口點(比如沒有我們常見的main()函數(shù))。 </p><p&
19、gt; 因為系統(tǒng)中的程序運行在自己的獨立進(jìn)程中,并且程序中的文件都有自己的限制其他程序訪問的權(quán)限,所以,你的程序不能直接激活其他程序中的組件。但是Android系統(tǒng)就可以。具體是這樣的實現(xiàn)的,為了激活(activate)其他程序中的組件,你必須向系統(tǒng)發(fā)送一個消息來詳細(xì)說明你要啟動其他組件的意圖,這樣系統(tǒng)才會為你激活這個組件。 </p><p> 激活組件(Activating Compo
20、nents)</p><p> 四大組件中的三個組件——activities、services和broadcast receiver——是由一種叫intent的異步消息來激活的。這些intents在運行時(runtime)將這些屬于你的程序或不同程序的單獨的組件綁定在一起(bind),你可以把這些intents看作是需要其他組件的action的messengers。</p><p&
21、gt; 一個intent就是一個Intent對象,這個intent定義了一種可以激活(activate)某個特定組件或者某種特定類型的組件,這兩種情況分別對應(yīng)兩種intent的定義方式或者顯示的或者隱式的。</p><p> 對于activities和services,一個intent定義了要執(zhí)行的操作(action)(比如,要“view”或者“send”什么)和要操作的數(shù)據(jù)的URI。比如,一個intent可
22、能會為一個activity傳遞一個請求來展示一張圖片或者打開一個網(wǎng)頁。有時,你可以啟動一個activity來得到返回的結(jié)果,在這個例子中這個activity的返回的結(jié)果也是一個Intent(比如,你可以發(fā)送一個intent讓用戶選擇一個personal contact并返回給你——這個返回的intent就包含了一個指向用戶選擇的聯(lián)系人的URI)。(關(guān)于activity和service的啟動方式,下面將介紹。)</p>
23、;<p> 對于廣播接收者來說,intent只是簡單的定義了要廣播的內(nèi)容(比如,一個用以表明電池電量很低的廣播僅包含了一個表明電池電量很低的字符串)。</p><p> 最后一種組件類型content provider并不是由intent來激活的(activate)。而是由接收到ContentResolver的請求時激活的。</p><p> 它們都各自有自己
24、的方法來激活相應(yīng)的組件:</p><p> 你可以通過傳遞一個Intent給startActivity()或startActivityForResult()啟動一個activity(或者給他一些新的要做的內(nèi)容)。使用startActivityForResult()你將得到一個返回結(jié)果。</p><p> 你可以通過傳遞一個Intent給startService()來start一個ser
25、vice(或者給一個正在運行的service一些新的指令(instructions))?;蛘吣憧梢酝ㄟ^把一個Intent傳遞給bindService()來綁定一個service。</p><p> 你可以通過傳遞一個Intent給諸如sendBroadcast()、sendOrderedBroadcast()或者sendStickyBroadcast()等方法來初始化一個廣播。</p><p
26、> 你可以通過調(diào)用ContentResolver的query()方法來執(zhí)行一次content provider的查詢操作。</p><p> 更多的關(guān)于intent的內(nèi)容,可以參看文檔中的Intents and Intent Filters。更多的關(guān)于激活特定組件的內(nèi)容可以參看文檔中的:Activities、Services、BroadcastReceiver、C
27、ontent Providers。</p><p> 關(guān)于Manifest文件</p><p> 在Android系統(tǒng)可以啟動一個應(yīng)用程序組件之前,Android系統(tǒng)必須通過讀取這個程序的AndroidManifest.xml(即manifest文件)文件來確定要啟動的組件存在。你的程序必須在這個manifest文件聲明用到的所有的組件,并且這個manifest文件必須在項目
28、的根目錄下。</p><p> 另外,這個manifest文件還聲明一些其他的東西,比如:</p><p> 確定這個程序需要的所有權(quán)限,比如Internet訪問權(quán)限或者讀取用戶聯(lián)系人權(quán)限。</p><p> 聲明這個運行這個程序所需要的最低API版本,這個可以根據(jù)開發(fā)該程序所使用的API版本。</p><p> 聲明該程序所需要的硬
29、件或軟件特征(features),比如照相機(jī)、藍(lán)牙服務(wù)或者多點觸屏。</p><p> 聲明該程序需要鏈接(link against)的API庫(不是Andorid的framework APIs),比如Google Maps library。</p><p><b> 組件聲明</b></p><p>
30、; Manifest文件的首要任務(wù)就是通知系統(tǒng)關(guān)于程序中要使用的組件。比如,一個manifest文件可以用如下的方式來聲明一個activity:</p><p> [java] view plaincopy</p><p> <?xml version="1.0" encoding="utf-8"?>&
31、#160; </p><p> <manifest ... > </p><p> <application android:icon="@drawable/app_icon.png" ... > </p><p>
32、 <activity android:name="com.example.project.ExampleActivity" </p><p> android:label="@string/example_label" ... > </p><p> <
33、/activity> </p><p><b> ... </b></p><p> </application> </p><p> </manifest> </p><p> 在<app
34、lication>元素中,android:icon屬性用于指定一個用于標(biāo)示該程序的icon。</p><p> 在<activity>元素中,android:name屬性用于確定這個擴(kuò)展自Activity的子類的全路徑名,android:label屬性用于標(biāo)示這個activity的對于用戶可見的label。</p><p> 你必須要用以下方式來聲明你的程序組件:&l
35、t;/p><p> activities:<activity>標(biāo)簽</p><p> services:<service>標(biāo)簽</p><p> broadcast receiver:<receiver>標(biāo)簽</p><p> content providers:<provid
36、er>標(biāo)簽</p><p> 如果程序中用到activities、services和content providers,你沒有在manifest文件中聲明,那么這些組件將不會被系統(tǒng)知道,結(jié)果就是你的程序不能運行。然而,broadcast receiver既可以在manifest文件中聲明也可以在代碼中動態(tài)創(chuàng)建(BroadcastReceiver),并通過調(diào)用registerReceiv
37、er()在系統(tǒng)中注冊。</p><p> 更多關(guān)于怎樣為你的程序構(gòu)建manifest文件,請參看文檔The AndroidManifes.xml文件。</p><p><b> 聲明組件的能力</b></p><p> 正如在上面Activating Components中討論的那樣,你可以使用一個Intent來啟動a
38、ctivities、services和broadcast receiver。你可以通過在intent中注明目標(biāo)組件的名字(使用的是組件的類名)來顯示的啟動組件。然而,intents真正強大的地方在與關(guān)于intent的actions的概念。通過intent的actions,你可以簡單的描述你要執(zhí)行的操作的類型(并且可以有選擇的描述你要處理的數(shù)據(jù)),可以允許系統(tǒng)在device中找到這個組件并啟動它。如果有多個組件可以執(zhí)行inten
39、t中描述的action,這時用戶就可以選擇一個來執(zhí)行。</p><p> 系統(tǒng)可以識別能對某intent做出反應(yīng)的方式是通過將接收到的intent和設(shè)備中其他程序的manifest文件的intent filters進(jìn)行比較實現(xiàn)的。</p><p> 當(dāng)你在程序的manifest文件中聲明一個組件之后,你可以有選擇包含intent filters,這些intent
40、160;filters表明了組件對接收自其他程序的intent做出反應(yīng)的能力(capabilities)。你可以通過添加一個<intent-filter>元素作為a child of the component's declaration element來為你的程序聲明一個intent filter。</p><p> 比
41、如,在一個郵件程序中的一個activity可以編寫新的郵件,這樣的話你就需要在manifest文件中來聲明一個intent filter來對“發(fā)送”intent響應(yīng)(為了發(fā)送郵件)。這樣,在你的程序中,一個activity就可以創(chuàng)建一個發(fā)送intent(ACTION_SEND),這樣當(dāng)你調(diào)用startaActivity()時,系統(tǒng)就會匹配郵件程序中的發(fā)送activity并啟動它。</p><p> 更
42、多關(guān)于創(chuàng)建intent filters的內(nèi)容,可以參看Intents and Intent Filter文檔。</p><p> 聲明運行程序所需的條件</p><p> Andorid系統(tǒng)可以支持很多不同的設(shè)備,并且這些設(shè)備的性能特征并不相同。為了防止你的程序被安裝在不能正常運行你的程序的較低android系統(tǒng)版本上,通過在manifest文件
43、中聲明你的程序支持的設(shè)備和軟件,便變得尤其重要起來。大多數(shù)的這些聲明僅是一些信息,而系統(tǒng)并不會讀取它們,但是其他的服務(wù)比如Android Market卻會閱讀這些聲明來幫助通過通過自己的設(shè)備搜索軟件的用戶過濾軟件。</p><p> 比如,你的程序需要照相機(jī),并且使用的Android2.1的APIs,那么你就必須在你的manifest文件中聲明這些需要。這樣的話,在Android Marke
44、t上,沒有照相機(jī)或者Android系統(tǒng)版本低于2.1將不能安裝你的程序。</p><p> 然而,如果你的程序不需要照相機(jī),你仍可以聲明你需要照相機(jī)。這種情況下,你的程序必須在運行時做一下檢查,來檢查這個設(shè)備是否含有照相機(jī),如果沒有照相機(jī)可用,則系統(tǒng)將會使使用照相機(jī)的相關(guān)程序不能用。</p><p> 下面是一些你在設(shè)計和開發(fā)你的程序時,必須要考慮的關(guān)于設(shè)備的一些重要方面:</p
45、><p><b> 屏幕大小和分辨率:</b></p><p> 為了根據(jù)屏幕的類型進(jìn)行分類,Android定義了兩個特征:屏幕大小和分辨率。</p><p> 屏幕尺寸有: 小,中,大,超大;</p><p> 屏幕分辨率類型:低分辨率,中分辨率,高分辨率,超高分辨率;</p><p&
46、gt; 默認(rèn)情況下,你的程序可以兼容所有的屏幕尺寸和分辨率,因為Android系統(tǒng)對你的程序的UI布局和image資源做了適當(dāng)?shù)恼{(diào)整。</p><p><b> 輸入方式:</b></p><p> 很多設(shè)備有不同類型的輸入方式,比如鍵盤、軌跡球、五位元導(dǎo)航。如果你的程序需要某特定形式的輸入方式,則你必須在manifes文件中使用<uses-configu
47、ration>標(biāo)簽來聲明。不過這種情況是比較少的。</p><p><b> 設(shè)備配置:</b></p><p> 有許多硬件或軟件并不全在Android系統(tǒng)的設(shè)備上,比如,一個照相機(jī)、光線傳感器、某個版本的 OpenGL,或者屏幕的保真度(fidelity)。你在任何條件下都不能假定Android設(shè)備具備某種特性(feature)(當(dāng)然得除掉Android
48、標(biāo)準(zhǔn)庫的情況),所以如果你的程序使用了某feature,則你必須使用<uses-feature>標(biāo)簽來聲明。</p><p> 不同地 Android 平臺設(shè)備通常運行不同版本的 Android ,比如 Android 1.6 或者 Android 2.3。每個后續(xù)版本通常包含之前版本所不支持的新增 API。 In order to indicate which set of A
49、PIs are available, 每個平臺版本對應(yīng)一個 API Level (例如, Android 1.0 對應(yīng)于 API Level 1 , Android 2.3 對應(yīng)于 API Level 9)。如果你使用任何在 1.0 版之后平臺新增的 API,你應(yīng)該使用 <uses-sdk> 元素聲明最低 API Level 是包含這些 API的。</p&g
50、t;<p> 為你的應(yīng)用程序聲明所有這些要求至關(guān)重要,因為,當(dāng)你在 Android Market 上發(fā)布你的應(yīng)用程序時,Market 使用這些聲明來過濾該應(yīng)用程序是否對于每臺設(shè)備可用。 這樣,你的應(yīng)用程序僅對能夠滿足你的應(yīng)用程序要求的設(shè)備可用。</p><p><b> 應(yīng)用程序資源</b></p><p> 一個應(yīng)用程序不僅僅由代碼組
51、成——它需要區(qū)別于源代碼的資源,比如圖片,音頻文件,以及任何與應(yīng)用程序視覺呈現(xiàn)相關(guān)聯(lián)的內(nèi)容。例如,你應(yīng)該使用 XML 文件定義動畫,菜單,風(fēng)格,顏色,以及 activity 用戶界面的布局。 使用應(yīng)用程序資源文件,可以更容易地更新你的應(yīng)用程序的特性而無需修改代碼,并且 — 通過提供多套可替換資源文件 — 使您能夠針對各種設(shè)備配置優(yōu)化你的應(yīng)用程序(比如不同語言或屏幕大小)。</p><p>
52、 對于你的安卓工程里面包含的每一項資源, SDK 構(gòu)建工具定義一個唯一的正整數(shù) ID 標(biāo)識符,你可以使用該標(biāo)識符從你的應(yīng)用程序代碼中或者從XML文件中定義的其他資源中特指該資源。例如,如果你的應(yīng)用程序中包含一個名為 logo.png 圖片文件(保存在 res/drawable/ 文件夾里), SDK 工具會生成一個資源 ID 命名為 R.drawable.logo,你可以使用
53、該 ID 特指這張圖片并插入你的用戶界面中。</p><p> 將資源提供工作同你的源代碼分隔開來最重要的原因之一是能夠使您為不同的設(shè)備配置提供可替換的資源文件。例如,在 XML 中定義 UI 字符串,你可以將這些字符串翻譯成其他語言并保存在特定的文件夾中。然后,基于語言 qualifier / 修飾詞 你添加資源文件夾名稱 (比如 res/values-f
54、r/ 對應(yīng)于法語字符串) 以及用戶語言設(shè)置, Android 系統(tǒng)會給你的 UI 提供適當(dāng)?shù)恼Z言字符串。</p><p> 對于你的可替代資源,Android 支持許多不同的 qualifiers / 修飾符 。修飾符是包含在你的資源文件夾名稱中的一個短字符串,以便界定哪些設(shè)備配置可使用這些資源。 另一個例子,對于不同的設(shè)備屏幕和大小,你應(yīng)當(dāng)為你的 activities 創(chuàng)建不同的
55、布局。 例如,當(dāng)設(shè)備屏幕是縱向的 (高),你可能希望一個按鈕垂直排列的布局,但當(dāng)屏幕是橫向的(寬),按鈕應(yīng)當(dāng)水平排列。為了根據(jù)方向調(diào)整布局,你可以定義兩個不同的布局文件并給每個布局文件夾提供適當(dāng)?shù)男揎椃?。這樣,系統(tǒng)會根據(jù)特定的設(shè)備方向自動為其提供適當(dāng)?shù)牟季帧?lt;/p><p><b> 附錄B 外文原文</b></p><p> Android Applicatio
56、n Fundamentals</p><p> Writer. Android.developer</p><p> Android applications are written in the Java programming language. The Android SDK tools compile the code—along with any data and reso
57、urce files—into an Android package, an archive file with an .apk suffix. All the code in a single .apk file is considered to be one application and is the file that Android-powered devices use to
58、 install the application.</p><p> Once installed on a device, each Android application lives in its own security sandbox:</p><p> The Android operating system is a multi-user Linux system in w
59、hich each application is a different user.</p><p> By default, the system assigns each application a unique Linux user ID (the ID is used only by the system and is unknown to the application). The system se
60、ts permissions for all the files in an application so that only the user ID assigned to that application can access them.</p><p> Each process has its own virtual machine (VM), so an application's code
61、runs in isolation from other applications.</p><p> By default, every application runs in its own Linux process. Android starts the process when any of the application's components need to be executed, t
62、hen shuts down the process when it's no longer needed or when the system must recover memory for other applications.</p><p> In this way, the Android system implements the principle of least privil
63、ege. That is, each application, by default, has access only to the components that it requires to do its work and no more. This creates a very secure environment in which an application cannot access parts of the system
64、for which it is not given permission.</p><p> However, there are ways for an application to share data with other applications and for an application to access system services:</p><p> It'
65、s possible to arrange for two applications to share the same Linux user ID, in which case they are able to access each other's files. To conserve system resources, applications with the same user ID can also arrange
66、to run in the same Linux process and share the same VM (the applications must also be signed with the same certificate).</p><p> An application can request permission to access device data such as the user&
67、#39;s contacts, SMS messages, the mountable storage (SD card), camera, Bluetooth, and more. All application permissions must be granted by the user at install time.</p><p> That covers the basics regarding
68、how an Android application exists within the system. The rest of this document introduces you to:</p><p> 1、The core framework components that define your application.</p><p> 2、The manifest f
69、ile in which you declare components and required device features for your application.</p><p> 3、Resources that are separate from the application code and allow your application to gracefully optimize its b
70、ehavior for a variety of device configurations. </p><p> Application Components</p><p> Application components are the essential building blocks of an Android application. Each component is a
71、 different point through which the system can enter your application. Not all components are actual entry points for the user and some depend on each other, but each one exists as its own entity and plays a specific role
72、—each one is a unique building block that helps define your application's overall behavior.</p><p> There are four different types of application components. Each type serves a distinct purpose and has
73、a distinct lifecycle that defines how the component is created and destroyed.</p><p> Here are the four types of application components:</p><p> Activities</p><p> An activi
74、ty represents a single screen with a user interface. For example, an email application might have one activity that shows a list of new emails, another activity to compose an email, and another activity for reading
75、emails. Although the activities work together to form a cohesive user experience in the email application, each one is independent of the others. As such, a different application can start any one of these activities (if
76、 the email application allows it). For example, a camera</p><p> An activity is implemented as a subclass of Activity and you can learn more about it in the Activities developer guide.&l
77、t;/p><p><b> Services</b></p><p> A service is a component that runs in the background to perform long-running operations or to perform work for remote processes. A service
78、does not provide a user interface. For example, a service might play music in the background while the user is in a different application, or it might fetch data over the network without blocking user interaction with an
79、 activity. Another component, such as an activity, can start the service and let it run or bind to it in order to interact with it.</p><p> A service is implemented as a subclass of Service and yo
80、u can learn more about it in the Services developer guide.</p><p> Content providers</p><p> A content provider manages a shared set of application data. You can store the
81、data in the file system, an SQLite database, on the web, or any other persistent storage location your application can access. Through the content provider, other applications can query or even modify the data (if the co
82、ntent provider allows it). For example, the Android system provides a content provider that manages the user's contact information. As such, any application with the proper permissions can query part o</p><
83、;p> Content providers are also useful for reading and writing data that is private to your application and not shared. For example, the Note Pad sample application uses a content provider to save notes.<
84、/p><p> A content provider is implemented as a subclass of ContentProvider and must implement a standard set of APIs that enable other applications to perform transactions. For more information, see
85、the Content Providers developer guide.</p><p> Broadcast receivers</p><p> A broadcast receiver is a component that responds to system-wide broadcast announcements. Many br
86、oadcasts originate from the system—for example, a broadcast announcing that the screen has turned off, the battery is low, or a picture was captured. Applications can also initiate broadcasts—for example, to let other ap
87、plications know that some data has been downloaded to the device and is available for them to use. Although broadcast receivers don't display a user interface, they may create a statu</p><p> A bro
88、adcast receiver is implemented as a subclass of BroadcastReceiver and each broadcast is delivered as an Intent object. For more information, see the BroadcastReceiver class.</p><p>
89、 A unique aspect of the Android system design is that any application can start another application’s component. For example, if you want the user to capture a photo with the device camera, there's probably another a
90、pplication that does that and your application can use it, instead of developing an activity to capture a photo yourself. You don't need to incorporate or even link to the code from the camera application. Instead, y
91、ou can simply start the activity in the camera application that captu</p><p> When the system starts a component, it starts the process for that application (if it's not already running) and instantiate
92、s the classes needed for the component. For example, if your application starts the activity in the camera application that captures a photo, that activity runs in the process that belongs to the camera application, not
93、in your application's process. Therefore, unlike applications on most other systems, Android applications don't have a single entry point (there's no main()</p><p> Because the system runs
94、each application in a separate process with file permissions that restrict access to other applications, your application cannot directly activate a component from another application. The Android system, however, can. S
95、o, to activate a component in another application, you must deliver a message to the system that specifies your intent to start a particular component. The system then activates the component for you.</p>
96、<p> Activating Components</p><p> Three of the four component types—activities, services, and broadcast receivers—are activated by an asynchronous message called an intent. Intents bind indivi
97、dual components to each other at runtime (you can think of them as the messengers that request an action from other components), whether the component belongs to your application or another.</p><p> An inte
98、nt is created with an Intent object, which defines a message to activate either a specific component or a specific type of component—an intent can be either explicit or implicit, respectively.</p&g
99、t;<p> For activities and services, an intent defines the action to perform (for example, to "view" or "send" something) and may specify the URI of the data to act on (among other things that
100、the component being started might need to know). For example, an intent might convey a request for an activity to show an image or to open a web page. In some cases, you can start an activity to receive a result, in whic
101、h case, the activity also returns the result in an Intent (for example, you can issue an intent</p><p> For broadcast receivers, the intent simply defines the announcement being broadcast (for exa
102、mple, a broadcast to indicate the device battery is low includes only a known action string that indicates "battery is low").</p><p> The other component type, content provider, is not activated b
103、y intents. Rather, it is activated when targeted by a request from a ContentResolver. The content resolver handles all direct transactions with the content provider so that the component that's performing transa
104、ctions with the provider doesn't need to and instead calls methods on the ContentResolver object. This leaves a layer of abstraction between the content provider and the component requesting information (fo
105、r security).</p><p> There are separate methods for activating each type of component:</p><p> You can start an activity (or give it something new to do) by passing an Intent to
106、;startActivity() or startActivityForResult() (when you want the activity to return a result).</p><p> You can start a service (or give new instructions to an ongoing service) by passing an
107、60;Intent to startService(). Or you can bind to the service by passing an Intent tobindService().</p><p> You can initiate a broadcast by passing an Intent to methods like
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 安卓應(yīng)用基礎(chǔ)
- 安卓應(yīng)用基礎(chǔ)畢業(yè)論文外文翻譯
- [雙語翻譯]安卓外文翻譯--安卓操作系統(tǒng)的防盜云應(yīng)用
- 安卓系統(tǒng)外文翻譯
- [雙語翻譯]安卓外文翻譯--安卓操作系統(tǒng)的防盜云應(yīng)用(英文)
- 2014年安卓外文翻譯--安卓操作系統(tǒng)的防盜云應(yīng)用
- [雙語翻譯]安卓外文翻譯--安卓操作系統(tǒng)的防盜云應(yīng)用中英全
- 2014年安卓外文翻譯--安卓操作系統(tǒng)的防盜云應(yīng)用.DOCX
- 安卓移動應(yīng)用開發(fā)論文
- 2014年安卓外文翻譯--安卓操作系統(tǒng)的防盜云應(yīng)用(英文).PDF
- 安卓 基礎(chǔ)知識
- 安卓 基礎(chǔ)知識
- 安卓軟件開發(fā)--畢業(yè)設(shè)計開題報告安卓軟件文獻(xiàn)翻譯(精)
- 外文翻譯---安卓系統(tǒng)的基本描述
- 基于安卓的移動課堂應(yīng)用開發(fā)
- 安卓開發(fā)初級教程
- 安卓開發(fā)——發(fā)展及要點
- 安卓android
- android安卓程序開發(fā)入門
- 安卓系統(tǒng)的安全性外文翻譯
評論
0/150
提交評論