自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Android應(yīng)用的基本原理

移動(dòng)開發(fā) Android
Android應(yīng) 用程序是用Java語言編寫的。編譯過后的字節(jié)碼,以及應(yīng)用程序要求的其他數(shù)據(jù)和資源文件,通過aapt工具被綁定在一起,稱為Android包,這是一 個(gè)帶.apk后綴的檔案文件。這個(gè)文件也是用戶下載到他們?cè)O(shè)備上的文件。所有的代碼在一個(gè)單一的.apk文件中,組成一個(gè)“應(yīng)用程序”。

從許多方面來說,每個(gè)Android應(yīng)用程序存活在它們自己的世界中

應(yīng)用基礎(chǔ)-Application Fundamentals

Android應(yīng)用程序以java作為開發(fā)語言。用Android SDK 提供的工具,可以將應(yīng)用程序所需要的數(shù)據(jù)和資源文件打包到一個(gè)android包文件中,這個(gè)文件用.apk作為擴(kuò)展名。所有代碼都在單個(gè).apk文件中, 當(dāng)成一個(gè)應(yīng)用,這個(gè)文件就是通常安裝在Android設(shè)備中的應(yīng)用. 一旦安裝到了一個(gè)設(shè)備,每個(gè)應(yīng)用生存在它自己的安全沙箱中。

  • 一個(gè)Android系統(tǒng)是一個(gè)多用戶的Linux系統(tǒng),其中的每個(gè)應(yīng)用都是一個(gè)不同的用戶。
  • 默認(rèn)情況下,系統(tǒng)給每個(gè)應(yīng)用分配一個(gè)獨(dú)立的Linux用戶ID(這個(gè)ID只由系統(tǒng)使用并且對(duì)應(yīng)用來說是不可知的),系統(tǒng)給在某個(gè)應(yīng)用中的所有文件設(shè)置了權(quán)限,所以只有分配了那個(gè)用戶ID的應(yīng)用才能訪問它們
  • 每個(gè)進(jìn)程擁有它自己的虛擬機(jī),所以一個(gè)應(yīng)用代碼的運(yùn)行,與其他應(yīng)用代碼的運(yùn)行是隔離的.
  • 默認(rèn)情況下,每個(gè)應(yīng)用程序均運(yùn)行于它自己的Linux進(jìn)程中。當(dāng)應(yīng)用程序中的任意代碼開始執(zhí)行時(shí),Android啟動(dòng)一個(gè)進(jìn)程,而當(dāng)不再需要此進(jìn)程而其它應(yīng)用程序又需要系統(tǒng)資源時(shí),則關(guān)閉這個(gè)進(jìn)程。

通過這種方法,Android系統(tǒng)實(shí)現(xiàn)了最小特權(quán)原則。默認(rèn),每個(gè)應(yīng)用僅僅訪問需要工作的組件,并不多做其他的事。這樣創(chuàng)建了一個(gè)非常安全的環(huán)境,應(yīng)用不能訪問系統(tǒng)沒有授權(quán)的其他部分.

然而,應(yīng)用可以有多種方法來與其他應(yīng)用,共享數(shù)據(jù)及訪問系統(tǒng)服務(wù):

  • 有可能安排兩個(gè)應(yīng)用共用一個(gè)linux用戶ID,在那種情況下,它們能互相訪問相互的數(shù)據(jù)。為了節(jié)約系統(tǒng)資源,擁有相同用戶ID的應(yīng)用,可能也被安排運(yùn)行在同一個(gè)Linux進(jìn)程中并共享相同的VM(應(yīng)用必須被簽名成同樣的認(rèn)證)。
  • 所有應(yīng)用能請(qǐng)求允許訪問硬件數(shù)據(jù),比如像用戶通信錄,SMS消息及可掛載的存儲(chǔ)設(shè)備(SD card),攝像頭,藍(lán)牙等,所有應(yīng)用的權(quán)限必須在用戶安裝時(shí)被許可。

上述了一個(gè)應(yīng)用怎樣存在于一個(gè)系統(tǒng)中的相關(guān)基本概念,這個(gè)文檔的其他部分將向你介紹如下 內(nèi)容:

  • 定義在你的應(yīng)用中核心框架組件
  • 在manifest中,給你的應(yīng)用,聲明組件及設(shè)備特點(diǎn)請(qǐng)求
  • 獨(dú)立于應(yīng)用代碼的資源,可以讓你的應(yīng)用極大的優(yōu)化它在各種配置設(shè)備的表現(xiàn)

應(yīng)用組件-Application Components

應(yīng)用組件是構(gòu)建Android應(yīng)用程序的關(guān)鍵和基石。 每個(gè)組件是一個(gè)不同的入點(diǎn),系統(tǒng)可以從這些點(diǎn)進(jìn)入到你的應(yīng)用。對(duì)于用戶來說,并不是每個(gè)組件都是實(shí)際的入點(diǎn),但它們之間有一些依賴.但是每一個(gè)存在的組件 都有它自己的一個(gè)入點(diǎn),并扮演一個(gè)特定的角色--每一個(gè)都是獨(dú)一無二的構(gòu)建塊,幫助你定義你的應(yīng)用的整體行為.

有四個(gè)不同類型的應(yīng)用組件,每個(gè)類型服務(wù)于一個(gè)不同的目的,并有不同的生命周期,生命周期定義了如何創(chuàng)建和銷毀它.

下面是四種應(yīng)用組件:

Activities活動(dòng)

  • 一個(gè)activity在一個(gè)屏幕,顯示一個(gè)用戶接口.比如,一個(gè)email應(yīng)用可能有一個(gè)activity,這個(gè)activity用于顯示新的 email列表.而另一個(gè)activity用于寫郵件,還有一個(gè)activity用于讀取郵件.雖然這些activities一起工作于email應(yīng)用 中,形成一個(gè)完整的用戶體驗(yàn)但每一個(gè)部分又是相互獨(dú)立的.正因如此,不同的應(yīng)用才能啟動(dòng)這些活動(dòng)的任意一個(gè)(如個(gè)email應(yīng)用允許它).比如,一個(gè)照相 的應(yīng)用,能開啟一個(gè)email應(yīng)用中寫封新郵件的活動(dòng),讓用戶分享一張照片.
  • 一個(gè)activity被當(dāng)作Activity的子類來實(shí)現(xiàn)的,在Activities開發(fā)指南中,你可以學(xué)到更多關(guān)于它的使用

Services服務(wù)

  • 一個(gè)service是長(zhǎng)期運(yùn)行在后臺(tái),執(zhí)行操作的組件,甚至可以為遠(yuǎn)程進(jìn)程工作.一個(gè)服務(wù)不提供用戶界面.比如,當(dāng)用戶在其他應(yīng)用中時(shí),一個(gè)服務(wù) 可能在后臺(tái)播放音樂,或者在后臺(tái)獲取數(shù)據(jù),這并不影響用戶跟其他的活動(dòng)進(jìn)行交互操作.其他的組件,比如一個(gè)activity,可以啟動(dòng)一個(gè)服務(wù),并可以讓 它運(yùn)行或者邦定到這個(gè)activity,以便與其進(jìn)行交互操作.
  • 一個(gè)服務(wù)是作為Service子類來實(shí)現(xiàn)的,在Services開發(fā)指南中,你能學(xué)到更多關(guān)于它的使用

Content providers 內(nèi)容提供

  • 一個(gè)content provider管理共享的應(yīng)用數(shù)據(jù)集.你可以把數(shù)據(jù)存在文件系統(tǒng)中,一個(gè)SQLite數(shù)據(jù)庫中,網(wǎng)上,或你應(yīng)用可以訪問的永久存儲(chǔ)器中.通過內(nèi)容提供 者,其他的應(yīng)用可以查詢甚至修改數(shù)據(jù)(如果內(nèi)容提供者允許的話). 比如,Android系統(tǒng)提供一個(gè)內(nèi)容提供者管理用戶通信錄信息.因此,任何擁用適當(dāng)權(quán)限的應(yīng)用,可以查詢內(nèi)容提供者的部分來(比如 ContactsContract.Data)讀取和寫入關(guān)于某個(gè)人的信息.內(nèi)容提供者對(duì)于讀取和寫入屬于你的應(yīng)用的私有的非共享數(shù)據(jù)也是非常有用的,比 如Note Pad樣例應(yīng)用程序,就使用內(nèi)容提供者來保存筆記的.
  • 一個(gè)內(nèi)容提供者被當(dāng)作ContentProvider的子類實(shí)現(xiàn),并且必須實(shí)現(xiàn)一套標(biāo)準(zhǔn)的APIs,以讓其他的應(yīng)用能執(zhí)行交換操作。
  • 參考Content Providers開發(fā)指南,以了解更多信息.

Broadcast receivers廣播接收者

  • 廣播接收者是一個(gè)響應(yīng)系統(tǒng)范圍廣播公告(通知)的組件.許多廣播信息,都是來源于系統(tǒng),比如,通知屏幕關(guān)閉的公告,電量低,或抓取了一張圖片.應(yīng) 用也能發(fā)起廣播,比如,讓其他的應(yīng)用知道一些數(shù)據(jù)已下載到設(shè)備了,并且他們可以使用了。雖然廣播接收者,不能顯示用戶界面,但當(dāng)一個(gè)廣播事件發(fā)生時(shí),它們 可以創(chuàng)建一個(gè)狀態(tài)通知器,去提醒用戶.但更多情況下,一個(gè)廣播接收者只是一個(gè)其他組件,想要做極小量事件的一個(gè)"gateway”(途徑).舉例,它可能 發(fā)起一個(gè)服務(wù),去執(zhí)行關(guān)于某個(gè)事件的一些工作.
  • 一個(gè)廣播接收者,是當(dāng)作BroadcastReceiver子類被實(shí)現(xiàn)的.每個(gè)廣播接收者都是從Intent對(duì)象衍生出來的。更多信息,請(qǐng)參考BroadcastReceiver類

任何一個(gè)應(yīng)用能啟動(dòng)另一個(gè)其他應(yīng)用的組件,是Android系統(tǒng)設(shè)計(jì)獨(dú)一無二的方面(aspect).比如,你想要用設(shè)備的照相機(jī)拍一張圖片.其他 的應(yīng)用已經(jīng)有了這個(gè)功能,并且你的應(yīng)用可以使用它,而不需要你自己去開發(fā)一個(gè)拍照相的activity.你并不需要合并(包含)或者甚至是鏈接 camera應(yīng)中的代碼; 而只是,簡(jiǎn)單的啟動(dòng)camera應(yīng)用中的活動(dòng),來拍照就可以了.當(dāng)拍照完成,甚至把照片返回給你的應(yīng)用,所以你能使用它。對(duì)于用戶來講,camera像是 你應(yīng)用中一部分.當(dāng)系統(tǒng)開啟一個(gè)組件時(shí),它會(huì)啟動(dòng)那個(gè)應(yīng)用的進(jìn)程(如果該應(yīng)用沒有運(yùn)行),并實(shí)例化該組件所需要的類.舉例,如果你的應(yīng)用開啟一個(gè) camera應(yīng)用的activity,來拍照,這個(gè)activity將運(yùn)行在屬于camera應(yīng)用的進(jìn)程中,而不是在你的應(yīng)用的進(jìn)程中.因此,不像大多數(shù) 其他的系統(tǒng)的應(yīng)用,Android應(yīng)用,沒有單個(gè)的入點(diǎn)(比如沒有main()函數(shù)).

因?yàn)橄到y(tǒng)運(yùn)行的每個(gè)應(yīng)用,在一個(gè)帶有文件權(quán)限的,獨(dú)立的進(jìn)程中,這樣限制了對(duì)其他應(yīng)用的訪問,你的應(yīng)用不能直接訪問其他應(yīng)用中的組件.但時(shí),Android系統(tǒng)也能激活其他應(yīng)用的組件.你必須傳一個(gè)消息給系統(tǒng),指定你想要啟動(dòng)的組件,然后系統(tǒng)為你激活這個(gè)組件.

激活組件-Activating Components

4個(gè)組件中的其中三個(gè)組件---activities,serivces,和broadcast receivers----是被叫做intent的異步消息激活的.在運(yùn)行時(shí),Intents把某個(gè)的組件與其他的組件互相邦定,而不管這個(gè)組件是否屬于 你的應(yīng)用還是其他的應(yīng)用(你可以把它們想像成一個(gè)消息,用于請(qǐng)求一個(gè)其他組件的動(dòng)作).

一個(gè)intent是一個(gè)由Intent創(chuàng)建的對(duì)象.該對(duì)象定義了一個(gè)激活某個(gè)特定組件或者某個(gè)組件類型的消息,一個(gè)intent可以是顯示的,同樣,也可以是隱式的.

對(duì)于activities和services,一個(gè)intent(意圖)定義了一個(gè)要執(zhí)行的動(dòng)作(比如:to”view”或"send" 些什么),并指定了要采用的URI格式的數(shù)據(jù)(其中一些,是其他組件啟動(dòng)所需要知道的).比如,一個(gè)intent可能傳送一個(gè)請(qǐng)求給一個(gè) activity,要顯示一張圖片或打開一個(gè)網(wǎng)頁.在有些情況,你啟動(dòng)一個(gè)activity接收一個(gè)結(jié)果,這種情況下,activity將在Intent 中返回一個(gè)結(jié)果.(比如,你可以指示一個(gè)intent,讓用戶取一個(gè)人的聯(lián)系方式,并返回給你,返回的intent中會(huì)包含一個(gè)指向選定聯(lián)系方式的 URI.)

對(duì)于廣播接收者,intent只是定義了一個(gè)做為廣播的公告.(比如,一個(gè)廣播指出,設(shè)備電池低,它只是包含了一個(gè)動(dòng)作字串,表示”電池低”).

其他組件,內(nèi)容提供者,不會(huì)被intents所激活.進(jìn)一步講,它是內(nèi)容解釋者(ContentResolver)所請(qǐng)求的目標(biāo)所激活的.內(nèi)容解釋 者,處理所有與內(nèi)容提供者的直接交換.所以組件不需要執(zhí)行與提供者交換,而是調(diào)用ContentResolver對(duì)象方法.(這一句不好理解。)為了安全 起見,組件請(qǐng)求信息與內(nèi)容提供者之間有一個(gè)抽象層.

下面是激活各種類型組件的幾個(gè)方法:

  • 你可以通過傳一個(gè)(或者一些要做新的事情)Intent參數(shù)給startActivity()或startActivityForResult()(當(dāng)你想要activity返回一個(gè)參數(shù))函數(shù)(),來啟動(dòng)一個(gè)activity.
  • 你可以傳一個(gè)Intent給startService()方法,(或給一個(gè)新的指令給正在運(yùn)行的服啟),或者你可以傳一個(gè)Intent給bindService()方法來邦定到服務(wù).
  • 你可以通過使用sendBroadcast(), sendOrderedBroadcast(), 或者 sendStickyBroadcast()三種方法來廣播一個(gè)intent。
  • 你可以對(duì)ContentResolver調(diào)用query()方法,對(duì)內(nèi)容提供者進(jìn)行查詢

關(guān)于使用intents的詳細(xì)信息,請(qǐng)看Intents and Intent Filters 文檔。在后面的文檔中,也有一些關(guān)于激活某個(gè)組件的信息Activities, Services, BroadcastReceiver and Content Providers.

清單文件-The Manifest File

在Android系統(tǒng)開啟一個(gè)應(yīng)用組件之前,系統(tǒng)必須通過讀取AndroidManifest.xml文件來知道組件的存在.你的應(yīng)用必須把它所有的組件聲明在這個(gè)文件中,并且必須在應(yīng)用工程的根目錄下.

這個(gè)manifest文件除了聲明組件外,還處理了許多其他的事情,比如:

  • 指定應(yīng)用請(qǐng)求的其他權(quán)限,訪問網(wǎng)絡(luò)或訪問用戶的通信錄
  • 聲明應(yīng)用要求的最小API Level,應(yīng)用使用的是那個(gè)API
  • 聲明應(yīng)用請(qǐng)求和使用的軟硬件特征,比如照相機(jī),藍(lán)牙服務(wù),或多點(diǎn)觸模屏
  • 應(yīng)用需要鏈接的API庫,比如Google Maps library
  • 等等

聲明組件-Declaring components

manifest文件的主要任務(wù)是告訴系統(tǒng),應(yīng)用的組件,比如,一個(gè)manifest可以這樣聲明一個(gè)activity:

  1. <?xml version="1.0" encoding="utf-8"?> 
  2. <manifest ... > 
  3.     <application android:icon="@drawable/app_icon.png" ... > 
  4.         <activity android:name="com.example.project.ExampleActivity" 
  5.                   android:label="@string/example_label" ... > 
  6.         </activity> 
  7.         ... 
  8.     </application> 
  9. </manifest> 

在<application> 元素中,android:icon指定應(yīng)用的icon資源 在<activity> 元素中的,android:name 屬性,指定Activity子類的完全類名,android:label 屬性,為activity指定一個(gè)用戶可以見的標(biāo)簽。 你必須這樣聲明 所有應(yīng)用的組件:

  • <activity> 聲明活動(dòng)的元素
  • <service> 聲明服務(wù)的元素
  • <receiver> 聲明廣播接收者元素
  • <provider> 聲明內(nèi)容提供者元素

在你代碼中包含的,Activites,services和內(nèi)容提供者,若沒有在manifest中聲明,對(duì)系統(tǒng)來說是不可見的,即將永遠(yuǎn)不會(huì)運(yùn) 行。但是,廣播接收者即可以在manifest中聲明,也可以在代碼中動(dòng)態(tài)創(chuàng)建(做為BroadcastReceiver對(duì)象)并且通過 registerReceiver()方法向系統(tǒng)注冊(cè)。

了解manifest文件的詳細(xì)構(gòu)建過程,請(qǐng)看The AndroidManifest.xml File文檔

聲明組件功能-Declaring component capabilities

就如在上面的Activating Components中所討論的,你可以用一個(gè)Activating Components啟動(dòng)activities,services和broadcast 接收者.你也可以在intent中顯式的指定目標(biāo)組件(使用組件類名)。然而,intent真正強(qiáng)大的是它的intent action.(動(dòng)作)。通過使用intent動(dòng)作,你只須簡(jiǎn)單的描述你要執(zhí)行的action類型,(并且,可選的與執(zhí)行動(dòng)作有關(guān)的數(shù)據(jù)),并且允許系統(tǒng) 在設(shè)備上找到一個(gè)組件,這樣就可以執(zhí)行那個(gè)動(dòng)作并啟動(dòng)它。如果有多個(gè)組件可以執(zhí)行,intent指定的action,那么用戶選擇執(zhí)行那一個(gè).

通過比較設(shè)備上的其他應(yīng)用的manifest文件上的intent filters與接收到的intent.系統(tǒng)確定那個(gè)組件可以響應(yīng)一個(gè)intent. 當(dāng)你在你的應(yīng)用的manifest中聲明一個(gè)組件時(shí),你可以可選擇包括intent filters(意圖過濾器),來指定組件的功能,以讓其能響應(yīng)其他應(yīng)用的intents.你可以加一個(gè)組件聲明的元素的子元素<intent- filter>,為你組件聲明一個(gè)意圖過濾器。

比如,一個(gè)email應(yīng)用中,新建email的一個(gè)activity可能在它的manifest 中聲明了一個(gè)意圖過濾器,以便能響應(yīng)”send”意圖(為了發(fā)送郵件)。然后,在你的應(yīng)用中的一個(gè)activity,創(chuàng)建了一個(gè)帶有”send” ACTION_SEND的意圖,.當(dāng)你調(diào)用startActivity()方法,啟動(dòng)該意圖過濾器時(shí),系統(tǒng)將其匹配到email應(yīng)用的“send”活動(dòng), 并運(yùn)行它。

關(guān)于創(chuàng)建意圖過濾器的詳細(xì)信息,參考Intents and Intent Filters 文檔

聲明應(yīng)用需求-Declaring application requirements

有許多設(shè)備裝了Android,但它們并不提供所有相同的特點(diǎn)和功能.為了避免你的應(yīng)用,裝在一個(gè)沒有你應(yīng)用所必特征的設(shè)備上.通過在你的 manifest文件中聲明軟件硬件要求,明了的指出你的應(yīng)用支持的硬件類型是非常重要的大多數(shù)聲明僅僅只是信息,系統(tǒng)并不讀取他們,但像Android 市場(chǎng)這樣的其他服務(wù),將讀取它們,以便讓用戶在為他們的設(shè)備尋找應(yīng)用時(shí),可以進(jìn)行篩選.

比如,如果你的應(yīng)用需要有照相機(jī),并且使用的API是2.1(API Level 7),你應(yīng)在你的manifest文件中聲明這些要求.這樣,那些沒有照相機(jī)并且Android版本低于2.1的設(shè)備,就不能從Android市場(chǎng)上安裝你的應(yīng)用.

但,你也可以聲明你的應(yīng)用使用camera,但不必須要求。那種情況,你的應(yīng)用必在運(yùn)行時(shí)一個(gè)檢查,以確定設(shè)備是否有一個(gè)照相機(jī),如果沒有照相機(jī),并禁止與照相相關(guān)的功能。

下面是一些重要的設(shè)備特性,你在設(shè)計(jì)和開發(fā)應(yīng)用時(shí)必須要考慮的..

  • creen size and density 屏幕尺寸與解釋度
  • 為了能從它們的屏幕尺寸來分類設(shè)備,Android為每個(gè)設(shè)備定義了兩個(gè)特性:屏幕尺寸(屏幕的物理尺寸)和解釋度(在屏上的像素的物理密度,或者dpi--每英寸的點(diǎn)數(shù)).為了簡(jiǎn)化屏幕配置的所有不同類型,Android系統(tǒng)把它們分成可選的組,以便更容易定位

  • 屏幕大?。盒?,正常,大和極大

  • 屏幕解釋度:低解釋度,中解釋度,高解釋度,和極高解釋度

  • 默認(rèn)情況下,你的應(yīng)用是兼容所有屏幕尺寸和解釋度的,因?yàn)锳ndroid系統(tǒng)對(duì)此做了適當(dāng)?shù)恼{(diào)整,以使得它適合你的UI布局和圖像資源

  • 然而,你應(yīng)為某個(gè)屏幕尺寸創(chuàng)建特殊的布局,并為某些解釋度提供特定的圖像,使用可選的資源,并在你的manifest文件中用<supports-screens> 元素聲明,以明確指出你的應(yīng)用支持的屏幕尺寸.

  • 更多信息,參考Supporting Multiple Screens文檔

  • Input configurations 輸入配置

  • 許多設(shè)備為用提供了一個(gè)不同類型輸入裝置,比如,硬件鍵盤,軌跡球,five-way導(dǎo)航pad.如果你的應(yīng)用必須要一個(gè)特別的輸入硬件, 那么你應(yīng)在你的應(yīng)用中使用<uses-configuration>元素聲明.但時(shí),應(yīng)用必須要一個(gè)特別的輸入配置的情況是極少的.

  • Device features 設(shè)備特性

  • 在一個(gè)裝有Android的設(shè)備中,有許多軟硬件特性,有可能有,或有可能沒有。比如照相機(jī),光敏器件,藍(lán)牙,或某個(gè)版本的OpenGL, 或者觸模屏的精度.你應(yīng)該從不假設(shè),在所有的裝有Android的設(shè)備中某個(gè)特點(diǎn)是可用的(除了標(biāo)準(zhǔn)的Android庫),所以你應(yīng)該用 <uses-feature>元素聲明你的應(yīng)用支持的特征.

  • Platform Version 平臺(tái)版本

  • 不同的Android設(shè)備,經(jīng)常運(yùn)行不同的Android平臺(tái)版本,比如Android1.6或者2.3. 每一個(gè)成功的版本通常包括在前一個(gè)版本中不可用的API。為了指出,那些APIs集是可用的,每個(gè)平臺(tái)版本指定了一個(gè)API Level(比如, Android 1.0 is API Level 1 and Android 2.3 is API Level 9).如果你使用的APIs是在1.0版之后,加入到平臺(tái)的,你應(yīng)該用<uses-sdk>元素,聲明最小API級(jí)別,這樣就指出了那些 API將被采用.

為你的應(yīng)用聲明所有必要性的要求非常重要.因?yàn)?,?dāng)你把你的應(yīng)用發(fā)布到Android市場(chǎng).市場(chǎng),將用這些聲明信息來過濾出,那些應(yīng)用在每個(gè)設(shè)備是可用的. 同樣,你的應(yīng)用應(yīng)該只能在滿足所有你應(yīng)用需求的設(shè)備上才可用.

更多關(guān)于Android市場(chǎng)如何基于這些需求過濾的,請(qǐng)看Market Filters文檔

應(yīng)用資源-Application Resources

一個(gè)Android應(yīng)用的組成不僅只是代碼----它還有與代碼獨(dú)立的資源,比如圖像,音頻文件,及與應(yīng)用可顯圖像任何其他相關(guān)的.比如,你應(yīng)該定 義動(dòng)畫,菜單,風(fēng)格,顏色,和用XML文件定義活動(dòng)的布局.使用應(yīng)用資源,能讓你的應(yīng)用在不修改任何代碼的情況下容易的升級(jí)各種特性---并且通過提供一 套可選取的資源--能優(yōu)化你的應(yīng)用在各種配置不同的設(shè)備中的表現(xiàn)(比如不同的語言和屏幕尺寸).

對(duì)于每個(gè)包含在你的Android工程中的資源,SDK將其定義成一個(gè)唯一的整型ID,這樣你就可以在你的代碼中或在XML文件中定義的其他資源中 引用它.如果你的應(yīng)用包括一個(gè)圖片名字是logo.png(保存在res/drawable/目錄 ),SDK工具將生成一個(gè)資源ID命名成R.drawable.logo,你可以用它來引用圖片,并插入你的用戶界面中

提供與你的代碼分開的資源的一個(gè)很重要的方面是,使得你能為不同的配置的設(shè)備提供可選資源.比如,在XML中定義UI字串,你可以把字串翻譯成各種 不同的語言并保存在不同的文件中.然后,以基于語言限定詞,你可以追加資源目錄名(比如res/values-fr/ 用語法語資源),和用戶語言設(shè)置,Android系會(huì)將相應(yīng)的資源應(yīng)用到你的UI中.

Android為你的可選資源,支持許多不同的qualifiers (限定詞).限定詞是一個(gè)包括在你的目錄名中的一個(gè)簡(jiǎn)短的字串,是為了定義那些資源將用在,該配置的設(shè)備上.再如,由于設(shè)備的屏幕的方向和尺寸不同,你通 常需要為你的活動(dòng)定義不同的布局.比如,若設(shè)備的屏幕是豎向(高),你可能要一個(gè)帶有重直button 的布局,當(dāng)屏幕是橫向的(寬),按鈕應(yīng)是水平對(duì)齊的.要根據(jù)方向來改變布局,你要定義兩個(gè)不同的布局,并在布局的目錄名中使用相應(yīng)的限定詞 (qualifier).然后,系統(tǒng)將自動(dòng)根據(jù)當(dāng)前的設(shè)備朝向來應(yīng)用相應(yīng)的布局.

要詳細(xì)了解,你的應(yīng)用中能包含的各種資源,及如何為各種配置的設(shè)備創(chuàng)建可選資源,請(qǐng)看Application Resources開發(fā)指南

原文地址:http://developer.android.com/guide/topics/fundamentals.html

負(fù)責(zé)人:kris

責(zé)任編輯:閆佳明 來源: wiki.eoe.cn
相關(guān)推薦

2013-07-05 14:41:27

Android

2012-01-12 14:37:34

jQuery

2011-11-29 12:17:00

2010-08-20 13:29:33

OFDM

2020-03-21 14:57:14

手機(jī)定位智能手機(jī)APP

2009-02-24 09:43:00

IP電話原理

2010-03-17 13:35:02

2016-08-17 23:53:29

網(wǎng)絡(luò)爬蟲抓取系統(tǒng)

2021-02-08 21:40:04

SockmapBPF存儲(chǔ)

2013-09-22 14:02:09

內(nèi)存數(shù)據(jù)庫

2016-08-18 00:04:09

網(wǎng)絡(luò)爬蟲抓取系統(tǒng)服務(wù)器

2019-11-28 10:45:28

ZooKeeper源碼分布式

2020-11-26 13:54:03

容器LinuxDocker

2011-07-07 14:46:10

Cocoa Xcode

2010-03-18 20:13:03

Java socket

2010-06-18 17:28:37

Linux Anacr

2020-12-29 16:55:44

ZooKeeper運(yùn)維數(shù)據(jù)結(jié)構(gòu)

2011-07-07 14:10:21

Cocoa 內(nèi)省 hash

2009-06-11 09:56:09

MySQL Repli原理

2010-02-04 14:25:27

點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)