android開發基礎(Android Application Fundamentals)

應用基礎

快速查看

  • Android應用程序是由一個或多個應用程序組件(活動,服務,內容提供商和廣播接收器)
  • 每一個組件執行一個應用程序的行爲在總體不一樣的角色,並且每個能夠單獨啓動(甚至由其餘應用程序)
  • 清單文件必須申報程序中的全部組件,並應申報全部的應用需求,如所需的最低版本的Android和任何硬件配置的要求,
  • 非代碼應用程序資源(圖像,字符串,佈局文件等),應包括對不一樣的設備配置方案(如不一樣語言,不一樣的佈局不一樣的字符串不一樣屏幕尺寸)

在這份文件

  1. 應用程序組件
    1. 激活組件
  2. 該清單文件
    1. 聲明組件
    2. 聲明應用需求
  3. 應用程序資源

在Java編程語言編寫的Android應用程序的Android的SDK工具編譯代碼以及與任何數據和到一個Android的包,一個歸檔文件檔案資源的.apk後綴,全部的在一個單一的代碼.apk文件被認爲是一個應用程序,是Android的文件,供電設備來安裝應用程序。 html

一旦安裝在設備上,每一個Android應用程序的生命在它本身的安全沙箱: java

  • 而Android操做系統是一個多用戶Linux系統中,每一個應用程序是一個不一樣的用戶。
  • 默認狀況下,每一個應用程序的系統分配一個惟一的Linux用戶ID(該ID僅用於由系統是未知的應用程序),系統設置全部的應用程序中的文件權限,以便只有用戶ID分配給該應用程序能夠訪問它們。
  • 每一個進程都有它本身的虛擬機(VM),所以應用程序的代碼在從其餘應用程序隔離運行。
  • 默認狀況下,每一個應用程序運行在它本身的Linux進程。Android的啓動過程時,應用程序的任何組件須要被執行,而後關閉該進程時,它再也不須要或恢復時,系統必須爲其餘應用程序的內存。

這樣一來,Android系統實現了最小特權原則,也就是說,每一個應用程序,默認狀況下,只能訪問的組件,它須要作的工做,沒有更多,這將建立一個很是安全的環境,使應用程序沒法訪問的,這就是它沒有給予許可制度的部分。 android

可是,有一個應用程序的方法與其餘應用程序和應用程序訪問系統服務的數據: 數據庫

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

這涵蓋了基本就如何Android應用程序在系統中存在這個文件的其他部分向您介紹: 編程

  • 框架的核心組件定義應用程序。
  • 清單文件中聲明組件和應用程序所需的設備功能。
  • 資源是從應用程序代碼分開,並容許您的應用程序正常優化的設備配置各類其行爲。

應用程序組件

應 用組件是一個Android應用程序的基石,每一個組件是一個不一樣的點,經過該系統能夠輸入您的應用程序,並不是全部組件都爲用戶和一些依賴於對方實際的切入 點,但每個做爲它的存在本身的實體,起着特定的做用,每個都是一個獨特的建築塊,幫助肯定您的應用程序的總體行爲。 api

有四種不一樣類型的應用程序組件,每一個類型提供不一樣的目的,具備明顯的生命週期定義了組件的建立和銷燬。 安全

下面是應用程序組件的四種類型: 網絡

活動
一個活動是一個帶有用戶界面的單一屏幕,例如,電子郵件應用程序可能有一個活動,展現了新的電子郵件列表,另外一個活動,撰寫電子郵件,閱讀電子郵件和另外一個活動 ,雖然活動的工做在一塊兒,造成在電子郵件應用程序中有凝聚力的用戶體驗,每個都是獨立的人,所以,不一樣的應用程序能夠啓動任何這些活動之一(若是容許它 的電子郵件應用程序),例如,一個攝像頭應用程序能夠啓動活動電子郵件應用程序,組成新的郵件,爲了使用戶可以共享圖片。

一個活動是做爲一個子Activity ,並能夠學到更多關於它的活動的開發指南。 app

服務
服務是一種組件,它在後臺執行長時間運行的操做或執行對遠程進程的工做運行。 服務不提供用戶界面,例如, 服務可能會在後臺播放音樂,而用戶在爲不一樣的應用,也可能取不阻塞用戶與互動活動在網絡上的數據的另外一個組成部分,如活動,能夠啓動服務,讓它運行或綁定到它以交互。

一個服務實現爲一個子類Service ,你能夠了解它更多的服務開發指南。 框架

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

用於讀取和寫入數據的有用的內容提供商也在私下是否是你的應用和共享。例如, 記事本樣本內容提供商保存使用應用筆記。

內容提供商是做爲一個子類ContentProvider必須執行一個標準的API集,使其餘應用程序來執行交易。欲瞭解更多信息,請參閱內容提供商開發指南。

廣播接收器
一個廣播接收器是一個組件,響應全系統的廣播通知,許多來自廣播系統,例如, 廣播宣佈,該屏幕已關閉,電池低,或圖片被抓獲。應用程序還能夠啓動廣播,例如,讓一些其餘數據應用程序知道已下載到設備,並提供給他們使用,雖然不顯示用戶界面的廣播接收器,可能他們建立一個狀態欄的通知 ,提醒用戶當廣播事件發生時,更常見的是,雖然,廣播接收器只是一個「網關」到其餘組件,目的是作了很是少許的工做,例如,它可能會啓動一個服務來執行對事件的一些工做。

一個廣播是做爲一個接收器子BroadcastReceiver和每一個廣播還做爲一項Intent對象。更多信息,請參閱BroadcastReceiver類。

一 個Android系統的設計獨特之處是,任何應用程序能夠啓動另外一個應用程序的組件,例如,若是但願用戶可以捕獲與設備上的照相機照片,有多是另外一種應 用程序,這是否和您的應用程序可使用它,而不是發展活動捕捉本身的照片,你沒必要歸入甚至連接從相機應用程序代碼,相反,你能夠簡單地啓動應用程序,在相 機捕捉照片的活動,當完成後,照片甚至退回到您的應用程序,以便您可使用它。對於用戶來講,它好像相機其實是一個應用程序的一部分。

當 系統啓動一個組成部分,它啓動該應用程序的進程(若是它還沒有運行),並實例化該組件所須要的類,例如,若是你的應用程序啓動相機中的應用程序的活動,捕捉 的照片,該活動運行在應用過程當中屬於相機,在你的應用程序的進程沒有,所以,與大多數其餘的系統上應用,Android應用程序沒有一個單一的入口點(有 沒有main()函數,例如)。

因爲系統運行中的每個與文件權限限制訪問其餘應用程序分離過程當中的應用,應用程序不能直接激活從另外一個應用程序組件的Android系統,不過,能夠的。所以,要激活另外一個應用程序組件,您必須提供一個信息系統,指定你的意圖 ,以啓動特定組成部分,系統將激活你的組成部分。

激活組件

四個組件類型,活動,服務和廣 播接收器三,是激活一個異步消息稱爲意圖。意圖結合各個組件在運行時向對方(你能夠認爲它們的信使,請求採起行動的其餘組件),組件是否屬於您的應用程序或另外一個。

目的是創建一個與Intent對象,它激活要麼定義到一個特定的組件類型或特定組件的消息的意圖,能夠是顯式或隱式的,分別。

對 於活動和服務,意圖定義了要執行的操做(例如,「意見」或「送」的東西),可能指定數據URI採起行動(在其餘事情,正在啓動的組件可能須要知道),例 如,一個意圖可能傳達了一個活動,以顯示圖像或打開一個網頁的請求,在某些狀況下,能夠啓動一個活動,收到一個結果,在這種狀況下,該項活動同時在返回結 果an Intent (例如,故意讓你選擇一個問題能夠用戶和我的聯繫您有它返回到返回,指向所選擇的意向包括聯繫URI)。

對於廣播接收器,其目的只是定義了公告正在播出的(例如,廣播指示裝置的電池低只包括已知的操做字符串,表示「電池電量低」)。

其餘組件類型,內容提供商,沒有激活的意圖,相反,它被激活時,由來自請求的目標ContentResolver ,內容解析器處理與內容提供商的全部直接交易,使該元件的執行與供應商沒有按交易「T須要的方法,而是在通話ContentResolver對象。這使得內容提供商之間的抽象請求信息和組件(保安局)層。

有對activiting每一個組件類型不一樣的方法:

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

該清單文件

開始前能夠一個Android應用程序組件系統,該系統必須知道,應用程序的組件經過閱讀存在AndroidManifest.xml文件(如下簡稱「清單」文件)。應用程序必須聲明該文件及其全部組成部分,必須在根目錄的應用程序項目。

該清單作了的事情,除了宣佈該應用程序的組件,如號碼:

  • 找出任何用戶權限的應用要求,如上網或讀訪問用戶的聯繫人。
  • 聲明的最低空氣污染水平的應用要求,應用基礎上的使用的API。
  • 聲明所使用或應用程序,如照相機,藍牙服務,或者多點觸摸屏幕所需的硬件和軟件功能。
  • API須要對應用程序聯繫起來庫(比其餘的Android框架API),如, 谷歌地圖圖書館
  • 而更多的

聲明組件

該清單的首要任務是瞭解應用程序的組件系統,例如,清單文件能夠聲明一個活動以下:

<?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>元素, android:icon屬性指向資源標識的圖標應用程序。

<activity>元素, android:name屬性指定的徹底限定類名Activity子和android:label指定一個字符串用做活動的用戶可見的標籤屬性。

你必須申報全部的應用程序組件是這樣的:

活動,服務和內容提供商,你包括在您的來源,但不申報清單是不可見的系統,所以,不能運行,但廣播接收器能夠是宣佈在清單或在代碼中建立動態(如BroadcastReceiver對象),並經過調用系統中註冊registerReceiver()

如何結構有關您的應用程序清單文件的更多信息,請參閱的AndroidManifest.xml文件的文檔。

聲明組件功能

上述討論,在激活組件 ,你能使用Intent ,開始活動,服務和廣 播接收器,您能夠經過顯式命名目標組件的意圖(使用組件類名),不過,真正的權力的意圖在於意圖行動的概念。意圖的行動,你簡單地描述了操做類型要執 行(和可選的數據時,你要執行的動做),並容許系統上找到一個組件該設備能夠執行的行動和啓動它,若是有多個組件,能夠經過意圖描述的動做,而後用戶選擇 使用哪個。

該方法的系統識別組件,能夠應付的意圖是經過比較接收到的意圖,在設備上的其餘應用程序的清單文件中提供的過濾器的意圖。

當你聲明一個應用程序的清單組件,您能夠選擇意向包括組件的過濾器,從而宣佈從應用程序能夠響應其餘意圖給它的功能,你能夠聲明由添加爲你的組件的意圖過濾器<intent-filter>元素做爲組件的聲明元素的子元素。

例如,一個具備活動爲撰寫新的電子郵件地址的應用程序可能在其申報清單條目的意圖過濾器響應「送」意圖(以發送電子郵件)。一個應用程序中的活動能夠建立與意圖「送」行動( ACTION_SEND ),相匹配的系統中的應用電子郵件「發送」當你調用它推出的活動,並與意圖startActivity()

建立更多的有關過濾器的意圖,見意圖和意圖過濾器文件。

聲明應用需求

有 許多搭載Android,而不是他們都提供相同的特性和功能的各類設備,爲了防止在設備缺少你的應用程序所需的功能安裝的應用程序,這是重要的,你清楚地 定義一個配置文件設備的應用程序申報的設備和軟件要求您的清單文件類型的支持,這些聲明的大部分都是僅供參考,系統不會閱讀,但如Android市場對外 服務作閱讀,以便爲用戶提供過濾時他們尋找他們的設備應用程序。

例如,若是您的應用程序須要一個攝像頭和採用Android API的推出在2.1( 級API七),您應申報根據這些要求,在您的文件清單,這樣, 沒有一個攝像頭和設備,有一個Android版 本低於 2.1沒法安裝從Android Market應用程序。

可是,您也能夠聲明,您的應用程序使用的相機,但並不須要它,在這種狀況下,應用程序必須執行在運行時檢查,以肯定該設備有一個攝像頭,並禁用任何功能使用的相機,若是一個是不可用。

下面是一些重要設備的特色,你應該考慮你的設計和開發應用程序的一些:

屏幕尺寸和密度
爲了他們的屏幕類型分類的設備,Android的定義爲每一個設備兩個特色:屏幕尺寸(屏幕的物理尺寸)和屏幕密度(在屏幕上的物理像素密度或每英寸的DPI點)。爲了簡化全部的屏幕配置不一樣類型,Android系統歸納,使它們更容易進入到目標選擇組中。

屏幕尺寸:小,正常,大,特大。
屏幕密度爲:低密度,中密度,高密度和超高密度。

默認狀況下,應用程序與全部兼容的屏幕尺寸和密度,由於Android系統使您的用戶界面佈局和圖像資源進行適當的調整,可是,你要創造必定的專業佈局和屏幕尺寸爲某些專門的圖像密度,使用資源替代的佈局,並經過聲明的表現徹底在您的應用程序支持的屏幕尺寸<supports-screens>元素。

欲瞭解更多信息,請參閱支持多個屏幕上的文檔。

輸入配置
器件提供了許多不一樣的用戶投入機制,如硬件鍵盤,軌跡球或五維導航鍵盤類型,若是你的應用須要輸入特定類型的硬件,那麼你應該在你的清單DECLARE與IT <uses-configuration>元素,但它是一個應用程序的某些稀有應要求配置輸入。
設備功能
有 許多硬件和軟件功能,可能會或可能不存在於一個給定的Android系統的設備,如攝像頭,光線感應器,藍牙,某些版本的OpenGL,或觸摸屏的保 真度,你不該該假定必定是一個功能上的全部Android供電設備(比標準庫Android的可用性等)可用,所以應該宣佈您的應用程序使用的任何功能<uses-feature>元素。
平臺版本
不一樣的Android系統的設備一般運行不一樣版本的Android平臺,如Android 1.6或Android 2.3,每個後續版本一般包括額外的API沒有在之前的版本,爲了代表這組API可用,每一個平臺版本指定API級別 (例如,是Android 1.0的Android 2.3 API API Level 1和Level九)若是您使用任何平臺的API被添加到1.0版後,您應申報級別的API,其中最低者爲宣傳短片引進使用<uses-sdk>元素。

重要的是,你聲明你的應用程序的全部這些要求,由於,當您發佈在Android市場的應用,市場使用這些聲明,以過濾器應用在每一個設備上可用的,所以,您的應用程序應該只提供給設備,以知足全部的應用需求。

有關在如何在這些過濾器(和其餘)的要求爲基礎的Android市場應用更多的信息,請參閱市場過濾器文件。

應用程序資源

Android應用程序是由不只僅是代碼,它須要的資源,從源代碼分開,如圖像,音頻文件,以及任何有關應用程序的視覺表現,例如,你應該定義動畫,菜 單,多款式,顏色,以及與XML文件活動的用戶界面佈局,使用應用程序資源能夠很容易地更新,而無需修改代碼,並逐臺提供替代資源,能夠優化各類應用程序 的應用程序的不一樣特色設備配置(如不一樣語言和屏幕尺寸等)。

對於每個資源,你在你的Android項目包括,SDK構建工具定義一個惟一的整數ID,您能夠用它來參考您的應用程序代碼或從XML中定義的其餘資源的資源,例如,若是應用程序包含一個圖像文件名 爲logo.png (在保存的res/drawable/目錄),命名爲SDK工具生成資源ID R.drawable.logo ,您可使用引用圖像並將其插入您的用戶界面。

資源的提供從源代碼分開的最重要方面之一是可以爲你提供不一樣的設備配置替代資源,例如,經過定義XML UI字符串,你能夠翻譯成其餘語言的字符串,並保存這些字符串在不一樣的文件,而後根據語言限定符您追加到資源目錄的名稱(如res/values-fr/法國字符串值)和用戶的語言設置,Android系統應用適當的語言串到你的用戶界面。

Android支持你的許多不一樣的替代資源預選賽的 資格賽是一個簡短的字符串,你在你的資源目錄的名稱包括以定義設備配置這些資源應該被使用。另外一個例子是,你要常常創造不一樣爲您的活動佈局,在設備的屏幕 方向和大小而定,例如,當手機屏幕縱向(高),你可能須要一個按鈕是垂直佈局,可是當屏幕橫向的(寬),按鈕應水平對齊。改變佈局的方向而定,你能夠定義 兩個不一樣的佈局和應用適當的限定每一個佈局的目錄名,而後,系統會自動應用相應的佈局對當前設備的方向而定。

有關更多的資源的不一樣種類能夠包含在您的應用和如何建立不一樣的器件配置替代資源,請參閱資源應用程序開發指南。

相關文章
相關標籤/搜索