android介紹及四大組件說明。。

應用基礎


Android應用程序是用Java編程語言。在Android SDK工具編譯你的代碼,以及任何數據和資源文件-成APK:一個Android包,這是一個存檔文件的apk。後綴。一個APK文件包含了一個Android應用程序的所有內容,是Android平臺的設備用於安裝應用程序文件。

一旦安裝在設備上,每個Android應用程序生活在它自己的安全沙箱中:

  • Android操作系統是一個多用戶的Linux系統中,每個應用程序是不同的用戶。
  • 默認情況下,系統將分配每個應用程序的唯一的Linux用戶ID(該ID只被系統使用,是未知的應用程序)。該系統設置在一個應用程序中的所有文件的權限,以便只有分配給該應用程序的用戶ID可以訪問它們。
  • 每個進程都有自己的虛擬機(VM),因此一個應用程序的代碼在隔離從其他應用程序運行。
  • 默認情況下,每一個應用程序運行在它自己的Linux進程。Android的啓動時需要執行的任何應用程序的組件的過程,然後關閉該進程,當它不再需要時或系統必須恢復內存的其他應用程序。

在這種方式中,Android系統實現了最小特權原則。也就是說,每個應用程序,默認情況下,只能訪問到它需要做的工作並沒有更多的組件。這將創建在其中一個應用程序不能訪問它沒有獲得許可的系統部分一個非常安全的環境。

然而,有辦法讓一個應用程序與其他應用程序和一個應用程序共享數據訪問系統服務:

  • 它可以安排兩個應用程序共享相同的Linux用戶ID,在這種情況下,他們能夠訪問對方的文件。爲了節省系統資源,應用程序使用相同的用戶ID也可以安排在同一個Linux進程運行,並共享相同的VM(即應用程序也必須使用相同的證書籤名)。
  • 一個應用程序可以請求允許訪問設備數據,例如用戶的聯繫人,短信,可安裝存儲(SD卡),攝像頭,藍牙,等等。所有的應用程序的權限,必須授予在安裝時用戶。

這包括關於如何在系統中存在一個Android應用程序的基本知識。本文檔的其餘部分向您介紹:

  • 核心框架組件,定義你的應用程序。
  • 在聲明組件和所需設備功能爲您的應用程序清單文件。
  • 資源是獨立於應用程序的代碼,讓你的應用程序,以優雅地優化其行爲爲各種設備配置。

應用程序組件


應用程序組件是一個Android應用程序的基本構造塊。每個組件都是一個不同的角度,通過該系統可以進入你的應用程序。不是所有的組件都是實際的切入點,爲用戶和一些互相依賴的,但每一個存在作爲自己的實體,扮演着特定的角色,每個人都是一個獨特的建築塊,它可以幫助確定您的應用程序的整體行爲。

有四種不同類型的應用程序組件。每種類型提供不同的目的,並具有明顯的生命週期定義組件如何被創建和銷燬。

這裏有四種類型的應用程序組件:

活動
一個活動表示與用戶界面的單個屏幕。例如,電子郵件應用程序可能有一個活動,顯示新的電子郵件,另一個活動來撰寫電子郵件,並閱讀電子郵件另一個活動的清單。雖然活動一起形成在電子郵件應用程序一個有凝聚力的用戶體驗,每一個都是相互獨立的。因此,不同的應用程序可以啓動這些活動中的任何一個(如電子郵件應用程序允許的話)。例如,照相機的應用程序可以從該活動中的電子郵件應用程序,構成新的郵件,爲了共享一個圖像的用戶。

活動被實現爲一個子類的活動,你可以學習更多關於它的活動 開發人員指南。

服務
一個服務是運行在後臺執行長時間運行的操作或執行工作遠程進程的組成部分。一個服務不提供用戶界面。例如,一個服務可能會播放音樂的背景,而用戶在不同的應用程序,也可能獲取在網絡上的數據而不會阻塞用戶交互的活動。另一個組成部分,如一項活動,可以啓動該服務,並讓它運行或綁定到它,以與它進行交互。

一個服務被實現爲一個子類服務,你可以學習在關於它的更多服務開發人員指南。

內容提供商
一個內容提供商管理的應用程序數據的共享設置。你可以存儲在文件系統中,SQLite數據庫,在網絡上,或任何其他持久性存儲位置您的應用程序可以訪問的數據。通過內容提供商,其他應用程序可以查詢,甚至修改數據(如果內容提供商允許的話)。例如,Android系統提供了管理用戶的聯繫人信息的內容提供商。因此,具有適當權限的任何應用程序可以查詢的內容提供商(如部分ContactsContract.Data)來讀取和寫入有關一個特定的人的信息。

內容提供商也可用於讀取和寫入的數據是私有的,您的應用程序,而不是共享有用的。例如,記事示例應用程序使用一個內容提供商,以保存筆記。

內容提供者被實現爲一個子類的ContentProvider 和必須實現一組標準的API,使其他應用程序來執行交易。欲瞭解更多信息,請參閱內容提供商開發人員指南。

廣播接收機
一個廣播接收器是響應系統範圍的廣播公告的組成部分。許多廣播從系統,例如,廣播宣佈,該顯示屏已經關閉,電池電量低或圖片被抓獲起源。應用程序也可以發起廣播,例如,讓其他應用程序知道某些數據已經被下載到設備上,可供他們使用。雖然廣播接收機不顯示用戶界面,它們可以創建一個狀態欄通知 時的廣播事件發生時,以提醒用戶。更常見的是,雖然,在廣播接收器僅僅是一個“網關”到其他元件,是爲了做工作的一個非常小的量。例如,它可能會啓動一個服務來執行基於事件的一些工作。

一種廣播接收器被實現爲一個子類BroadcastReceiver的 和每個廣播遞送作爲意圖對象。欲瞭解更多信息,請參見BroadcastReceiver的類。

的Andr​​oid系統設計的一個獨特的方面是,任何應用程序可以啓動另一個應用程序的組件。例如,如果你希望用戶捕捉與設備相機拍照,有可能是另一個應用程序而不是開發活動給自己拍攝一張照片,這是否與您的應用程序可以使用它。你不需要把甚至從攝像頭的應用程序鏈接到的代碼。相反,你可以簡單地啓動相機應用程序,捕捉照片的活動。當完成後,照片甚至返回到您的應用程序,所以你可以使用它。對於用戶來說,它好像相機實際上是你的應用程序的一部分。

當系統啓動一個組件,它啓動這些進程爲應用程序(如果它尚未運行),並實例化所需組件的類。例如,如果您的應用程序啓動活動在相機應用程序,捕捉一張照片,該活動運行在屬於相機的應用程序,而不是在你的應用程序的進程的進程。因此,不像其他大多數系統的應用程序,Android應用程序沒有一個單一的入口點(沒有的main()函數,例如)。

由於系統運行在與該限制訪問其他應用程序文件的權限單獨的流程中的每個應用程序,您的應用程序不能直接從另一個應用程序激活一個組成部分。Android系統,但是,可以。因此,要激活另一個應用程序的組件,則必須將郵件傳遞到系統指定你的意圖來啓動某個特定組件。然後,系統會激活你的組件。

激活組件

三四個組件類型,活動,服務和廣 ​​播接收器,被稱爲異步消息激活的意圖。意圖單個組件相互結合在運行時(你可以把它們看作是請求來自其他組件的動作使者),該組件是否屬於您的應用程序或其他。

意圖是與建立意圖對象,它定義了一個消息來激活一個特定的組件或特定類型的組件的意圖可以是顯式的或隱式的,分別爲。

對於活動和服務,意圖定義了要執行的操作(例如,到“查看”或“發送”的東西),並且可以指定數據的URI作用於(其中包括了正在啓動的組件可能需要知道的)。例如,一個可能的意圖傳達給一個活動的請求,以顯示圖像或打開一個網頁。在某些情況下,你就可以開始一個活動來獲得的結果,在這種情況下,該活動也返回結果中的意圖(例如,你可以發出一個意圖,讓用戶選擇一個個人的接觸,並將它歸還給你-返回意圖包括一個URI指向選中的聯繫人)。

對於廣播接收機,其目的只是定義正在播出的公佈(例如,廣播,表示該設備電池電量低時只包括已知的操作字符串,表示“電池電量低”)。

其它成分的類型,內容提供者,不被意圖激活。相反,它是當通過從一個請求對象激活的ContentResolver。內容解析器處理與內容供應商的所有直接的交易,使該公司執行交易與提供的組件並不需要,而是調用的方法的ContentResolver對象。這使抽象的內容提供商和組分請求的信息(安全性)之間的層。

有用於激活每種類型的組件不同的方法:

如需使用意圖的更多信息,請參閱意圖和意圖過濾器文件。還提供了下列文件有關激活特定組件的詳細信息:活動服務BroadcastReceiver的內容提供商

清單文件


之前Android系統可以啓動一個應用程序組件,系統必須知道組件存在通過讀取應用程序的的AndroidManifest.xml文件(“清單”的文件)。您的應用程序必須申報其所有的組件在這個文件中,它必須在應用程序項目的根目錄下。

清單做了一些東西,除了聲明應用程序的組件,例如:

  • 識別任何用戶權限的應用程序需要,比如上網或讀訪問用戶的聯繫人。
  • 申報的最低API級別 的應用程序所需的,在此基礎上的API的應用程序使用。
  • 聲明由應用程序使用或需要的硬件和軟件功能,如攝像頭,藍牙服務,或者多點觸摸屏。
  • API庫的應用程序必須對(比Android框架的API等),掛如谷歌地圖的庫

聲明組件

清單的首要任務是通知系統有關的應用程序的組件。舉例來說,一個manifest文件可以按如下聲明一個活動:

<?XML version = "1.0" encoding = "utf-8" ?> 
<manifest ... > 
    <application  android:icon = "@drawable/app_icon.png" ... > 
        <activity  android:name = "com.example.project.ExampleActivity" 
                  android:label = "@string/example_label" ... > 
        </activity> 
        ... 
    </application> 
</manifest>

的<application> 元素,該機器人:圖標屬性指向的資源用於標識應用程序的圖標。

<activity>元素,該機器人:名稱屬性指定的完全限定類名的活動子和機器人:標籤屬性指定一個字符串作爲該活動的用戶可見的標籤使用。

您必須聲明所有的應用程序組件是這樣的:

活動,服務和內容提供商,你在你的源代碼,包括但不要在清單中聲明是不可見的系統,因此,不能運行。然而,廣播接收器既可以在manifest或在代碼中動態創建的聲明(如 BroadcastReceiver的對象),並通過調用註冊到系統 registerReceiver() 

欲瞭解更多有關如何構建manifest文件爲您的應用程序,請參閱AndroidManifest.xml文件 文檔。

聲明組件的能力

如上所述,在激活的組件,你可以使用一個 意圖,開始活動,服務和廣 ​​播接收器。您可以通過顯式命名目標組件(使用組件類名)的意圖這樣做。但是,意圖的真正力量在於概念隱含的意圖。一個隱含的意圖簡單地描述動作的類型來執行(和可選的數據時,你想要執行的操作),並允許系統找到可以執行的操作,並開始在設備上的組件。如果有可以執行由目的所描述的動作的多個組件,然後在用戶選擇使用哪一個。

系統識別,可以對意圖做出反應的組件的方法是通過比較接收到的意圖意圖過濾器在設備上的其它應用程序的清單文件中提供。

當你在你的應用程序的清單中聲明一個活動,您可以選擇包括意圖過濾器的申報活動的能力,因此它可以從其他應用程序到意圖作出迴應。您可以通過添加一個聲明一個意圖過濾器組件<intent-filter>元素作爲組件的聲明元素的子元素。

例如,如果你已經建立了與編寫新電子郵件活動的電子郵件應用程序,你可以聲明一個意圖過濾器,以響應“發送”意圖(以發送新郵件)所示:

<manifest ... > 
    ... 
    <application ... > 
        <activity  android:name = "com.example.project.ComposeEmailActivity" > 
            <intent-filter> 
                <action  android:name = "android.intent.action.SEND"  /> 
                <data  android:type = "*/*"  /> 
                <category  android:name = "android.intent.category.DEFAULT"  /> 
            </intent-filter> 
        </activity> 
    </application> 
</manifest>

然後,如果另一個應用程序的創建目的ACTION_SEND行動,並把它傳遞給的startActivity() ,該系統可以開始你的活動,以便用戶可以起草和發送電子郵件。

欲瞭解更多有關創建意圖過濾器,請參閱意圖和意圖過濾器文件。

聲明應用程序要求

有多種設備搭載Android,而不是他們的所有提供相同的功能和能力。爲了防止被安裝在缺乏必要通過您的應用程序功能的設備的應用程序,這一點很重要,你清楚地定義配置文件中的設備類型的應用程序支持通過聲明的設備和軟件的要求在你的manifest文件。大多數這些聲明是僅供參考,系統不會讀取它們,但外部服務,如谷歌播放務必閱讀它們,以提供過濾的用戶在搜索從他們的設備的應用程序。

例如,如果你的應用程序需要一個攝像頭,並使用了Android 2.1(API的推出API級別 7),你應該聲明這些作爲要求在你的manifest文件是這樣的:

<manifest ... > 
    <uses-feature  android:name = "android.hardware.camera.any" 
                  android:required = "true"  /> 
    <uses-sdk  android:minSdkVersion = "7"  android:targetSdkVersion = "19"  /> 
    ... 
</manifest>

現在,那些設備不會有一個攝像頭,並有一個Android版 ​​本比2.1不能從谷歌播放安裝您的應用程序。

不過,您也可以聲明你的應用程序使用相機,但並不 需要它。在這種情況下,您的應用程序必須設置必要的 屬性爲“假”,並檢查在運行時,設備是否有一個攝像頭,並禁用任何相機功能(如適用)。

如何你可以用不同的設備管理您的應用程序的兼容性的詳細信息是在提供設備兼容性 文檔。

應用程序資源


一個Android應用程序是由不僅僅是代碼,它需要的資源是獨立於源代碼,如圖像,音頻文件,以及有關應用程序的視覺呈現任何內容。例如,你應該定義動畫,菜單,樣式,顏色,以及與XML文件的活動用戶界面的佈局。使用應用程序資源,可以很容易地更新你的應用程序的各種特性,而無需修改代碼和 - 通過提供兩套替代資源,使您能夠優化你的應用程序,適用於各種設備配置(如不同的語言和屏幕大小)。

對於您在您的Android項目包括所有的資源,在SDK編譯工具定義一個唯一的整 ​​數ID,你可以用它來 ​​從您的應用程序的代碼或從XML中定義的其他資源引用資源。例如,如果您的應用程序包含一個名爲映像文件logo.png(保存在RES /繪製/目錄下),SDK工具生成一個名爲資源ID R.drawable.logo,您可以用它來 ​​引用該 ​​圖片並將其插入在用戶界面中。

其中提供資源從源代碼中分離出來的最重要的方面是能夠讓你爲不同的設備配置提供可替代資源。例如,通過定義在XML中的UI字符串,可以轉換字符串成其他語言,並保存這些字符串在單獨的文件。然後,基於語言限定詞 ,你附加到資源目錄的名稱(如RES /值-FR /法語字符串值)和用戶的語言設置,Android系統應用相應的語言字符串到你的UI。

Android支持多種不同的限定詞爲你替代資源。限定符是您在資源目錄的名稱包括以定義的這些資源應該用於設備配置的短字符串。再舉一個例子,你應該經常對你的活動創建不同的佈局,這取決於設備的屏幕方向和大小。例如,當設備屏幕處於縱向(高),您可能希望一個有按鈕的佈局是垂直的,但是當屏幕處於橫向(寬),按鈕應水平對齊。要更改佈局視方向,你可以定義兩個不同的佈局和應用適當的限定詞,以每個版面的目錄名。然後,系統將自動應用適當的佈局取決於當前設備的方向。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章