在Java編程語言編寫的Android應用程序的Android的SDK工具編譯代碼以及與任何數據和到一個Android的包,一個歸檔文件檔案資源的.apk
後綴,全部的在一個單一的代碼.apk
文件被認爲是一個應用程序,是Android的文件,供電設備來安裝應用程序。 html
一旦安裝在設備上,每一個Android應用程序的生命在它本身的安全沙箱: java
這樣一來,Android系統實現了最小特權原則,也就是說,每一個應用程序,默認狀況下,只能訪問的組件,它須要作的工做,沒有更多,這將建立一個很是安全的環境,使應用程序沒法訪問的,這就是它沒有給予許可制度的部分。 android
可是,有一個應用程序的方法與其餘應用程序和應用程序訪問系統服務的數據: 數據庫
這涵蓋了基本就如何Android應用程序在系統中存在這個文件的其他部分向您介紹: 編程
應 用組件是一個Android應用程序的基石,每一個組件是一個不一樣的點,經過該系統能夠輸入您的應用程序,並不是全部組件都爲用戶和一些依賴於對方實際的切入 點,但每個做爲它的存在本身的實體,起着特定的做用,每個都是一個獨特的建築塊,幫助肯定您的應用程序的總體行爲。 api
有四種不一樣類型的應用程序組件,每一個類型提供不一樣的目的,具備明顯的生命週期定義了組件的建立和銷燬。 安全
下面是應用程序組件的四種類型: 網絡
ContactsContract.Data
)讀取和寫人特定的信息。
用於讀取和寫入數據的有用的內容提供商也在私下是否是你的應用和共享。例如, 記事本樣本內容提供商保存使用應用筆記。
內容提供商是做爲一個子類ContentProvider
必須執行一個標準的API集,使其餘應用程序來執行交易。欲瞭解更多信息,請參閱內容提供商開發指南。
一個廣播是做爲一個接收器子BroadcastReceiver
和每一個廣播還做爲一項Intent
對象。更多信息,請參閱BroadcastReceiver
類。
一 個Android系統的設計獨特之處是,任何應用程序能夠啓動另外一個應用程序的組件,例如,若是但願用戶可以捕獲與設備上的照相機照片,有多是另外一種應 用程序,這是否和您的應用程序可使用它,而不是發展活動捕捉本身的照片,你沒必要歸入甚至連接從相機應用程序代碼,相反,你能夠簡單地啓動應用程序,在相 機捕捉照片的活動,當完成後,照片甚至退回到您的應用程序,以便您可使用它。對於用戶來講,它好像相機其實是一個應用程序的一部分。
當 系統啓動一個組成部分,它啓動該應用程序的進程(若是它還沒有運行),並實例化該組件所須要的類,例如,若是你的應用程序啓動相機中的應用程序的活動,捕捉 的照片,該活動運行在應用過程當中屬於相機,在你的應用程序的進程沒有,所以,與大多數其餘的系統上應用,Android應用程序沒有一個單一的入口點(有 沒有main()
函數,例如)。
因爲系統運行中的每個與文件權限限制訪問其餘應用程序分離過程當中的應用,應用程序不能直接激活從另外一個應用程序組件的Android系統,不過,能夠的。所以,要激活另外一個應用程序組件,您必須提供一個信息系統,指定你的意圖 ,以啓動特定組成部分,系統將激活你的組成部分。
四個組件類型,活動,服務和廣 播接收器三,是激活一個異步消息稱爲意圖。意圖結合各個組件在運行時向對方(你能夠認爲它們的信使,請求採起行動的其餘組件),組件是否屬於您的應用程序或另外一個。
目的是創建一個與Intent
對象,它激活要麼定義到一個特定的組件類型或特定組件的消息的意圖,能夠是顯式或隱式的,分別。
對 於活動和服務,意圖定義了要執行的操做(例如,「意見」或「送」的東西),可能指定數據URI採起行動(在其餘事情,正在啓動的組件可能須要知道),例 如,一個意圖可能傳達了一個活動,以顯示圖像或打開一個網頁的請求,在某些狀況下,能夠啓動一個活動,收到一個結果,在這種狀況下,該項活動同時在返回結 果an Intent
(例如,故意讓你選擇一個問題能夠用戶和我的聯繫您有它返回到返回,指向所選擇的意向包括聯繫URI)。
對於廣播接收器,其目的只是定義了公告正在播出的(例如,廣播指示裝置的電池低只包括已知的操做字符串,表示「電池電量低」)。
其餘組件類型,內容提供商,沒有激活的意圖,相反,它被激活時,由來自請求的目標ContentResolver
,內容解析器處理與內容提供商的全部直接交易,使該元件的執行與供應商沒有按交易「T須要的方法,而是在通話ContentResolver
對象。這使得內容提供商之間的抽象請求信息和組件(保安局)層。
有對activiting每一個組件類型不一樣的方法:
Intent
到startActivity()
或startActivityForResult()
當你想返回結果的活動)。 Intent
到startService()
或者也能夠由BIND傳遞到服務Intent
到bindService()
Intent
喜歡的方法sendBroadcast()
sendOrderedBroadcast()
或sendStickyBroadcast()
query()
在ContentResolver
。 如需使用意向信息,請參閱意圖和意圖過濾器文件更多關於激活特定組件的信息,另外在提供下列文件:。 活動 , 服務 , BroadcastReceiver
和內容提供商 。
開始前能夠一個Android應用程序組件系統,該系統必須知道,應用程序的組件經過閱讀存在AndroidManifest.xml
文件(如下簡稱「清單」文件)。應用程序必須聲明該文件及其全部組成部分,必須在根目錄的應用程序項目。
該清單作了的事情,除了宣佈該應用程序的組件,如號碼:
該清單的首要任務是瞭解應用程序的組件系統,例如,清單文件能夠聲明一個活動以下:
<?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
指定一個字符串用做活動的用戶可見的標籤屬性。
你必須申報全部的應用程序組件是這樣的:
<activity>
的活動元素 <service>
的服務元素 <receiver>
廣播接收器元件 <provider>
爲內容提供商元素 活動,服務和內容提供商,你包括在您的來源,但不申報清單是不可見的系統,所以,不能運行,但廣播接收器能夠是宣佈在清單或在代碼中建立動態(如BroadcastReceiver
對象),並經過調用系統中註冊registerReceiver()
如何結構有關您的應用程序清單文件的更多信息,請參閱的AndroidManifest.xml文件的文檔。
上述討論,在激活組件 ,你能使用Intent
,開始活動,服務和廣 播接收器,您能夠經過顯式命名目標組件的意圖(使用組件類名),不過,真正的權力的意圖在於意圖行動的概念。意圖的行動,你簡單地描述了操做類型要執 行(和可選的數據時,你要執行的動做),並容許系統上找到一個組件該設備能夠執行的行動和啓動它,若是有多個組件,能夠經過意圖描述的動做,而後用戶選擇 使用哪個。
該方法的系統識別組件,能夠應付的意圖是經過比較接收到的意圖,在設備上的其餘應用程序的清單文件中提供的過濾器的意圖。
當你聲明一個應用程序的清單組件,您能夠選擇意向包括組件的過濾器,從而宣佈從應用程序能夠響應其餘意圖給它的功能,你能夠聲明由添加爲你的組件的意圖過濾器<intent-filter>
元素做爲組件的聲明元素的子元素。
例如,一個具備活動爲撰寫新的電子郵件地址的應用程序可能在其申報清單條目的意圖過濾器響應「送」意圖(以發送電子郵件)。一個應用程序中的活動能夠建立與意圖「送」行動( ACTION_SEND
),相匹配的系統中的應用電子郵件「發送」當你調用它推出的活動,並與意圖startActivity()
建立更多的有關過濾器的意圖,見意圖和意圖過濾器文件。
有 許多搭載Android,而不是他們都提供相同的特性和功能的各類設備,爲了防止在設備缺少你的應用程序所需的功能安裝的應用程序,這是重要的,你清楚地 定義一個配置文件設備的應用程序申報的設備和軟件要求您的清單文件類型的支持,這些聲明的大部分都是僅供參考,系統不會閱讀,但如Android市場對外 服務作閱讀,以便爲用戶提供過濾時他們尋找他們的設備應用程序。
例如,若是您的應用程序須要一個攝像頭和採用Android API的推出在2.1( 級API七),您應申報根據這些要求,在您的文件清單,這樣, 沒有一個攝像頭和設備,有一個Android版 本低於 2.1沒法安裝從Android Market應用程序。
可是,您也能夠聲明,您的應用程序使用的相機,但並不須要它,在這種狀況下,應用程序必須執行在運行時檢查,以肯定該設備有一個攝像頭,並禁用任何功能使用的相機,若是一個是不可用。
下面是一些重要設備的特色,你應該考慮你的設計和開發應用程序的一些:
屏幕尺寸:小,正常,大,特大。
屏幕密度爲:低密度,中密度,高密度和超高密度。
默認狀況下,應用程序與全部兼容的屏幕尺寸和密度,由於Android系統使您的用戶界面佈局和圖像資源進行適當的調整,可是,你要創造必定的專業佈局和屏幕尺寸爲某些專門的圖像密度,使用資源替代的佈局,並經過聲明的表現徹底在您的應用程序支持的屏幕尺寸<supports-screens>
元素。
欲瞭解更多信息,請參閱支持多個屏幕上的文檔。
<uses-configuration>
元素,但它是一個應用程序的某些稀有應要求配置輸入。
<uses-feature>
元素。
<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支持你的許多不一樣的替代資源預選賽的 資格賽是一個簡短的字符串,你在你的資源目錄的名稱包括以定義設備配置這些資源應該被使用。另外一個例子是,你要常常創造不一樣爲您的活動佈局,在設備的屏幕 方向和大小而定,例如,當手機屏幕縱向(高),你可能須要一個按鈕是垂直佈局,可是當屏幕橫向的(寬),按鈕應水平對齊。改變佈局的方向而定,你能夠定義 兩個不一樣的佈局和應用適當的限定每一個佈局的目錄名,而後,系統會自動應用相應的佈局對當前設備的方向而定。
有關更多的資源的不一樣種類能夠包含在您的應用和如何建立不一樣的器件配置替代資源,請參閱資源應用程序開發指南。