文章地址:https://developer.android.com/guide/components/fundamentals.html html
一旦安裝到設備上,每個app就存活在本身的安全沙箱中。
android
一、android操做系統是一個多用戶的Linux系統,每個應用是不一樣的用戶web
二、默認,系統會給每個應用分配一個惟一的Linux用戶id(這個id只能被系統使用,對於應用是不可知的)。一個應用中的所用文件系統都會設置權限。有分配對應用戶id的應用才能訪問他們。數據庫
三、每一個進程有本身的虛擬機,因此應用代碼是運行在於其餘應用隔離的空間中。安全
四、默認,每一個應用運行在本身的Linux進程中。只要這個應用中的任何組件被執行Android就會啓動這個進程,若是他們再也不須要或是爲了其餘應用要恢復內存這時會關閉進程。app
然而,還有須要方法讓一個應用與其餘應用分享數據和訪問系統服務。
ide
一、能夠安排兩個應用共享同一Linux用戶id,使得他們能訪問互相的文件。爲了保持系統資源,有一樣用戶id的應用也被安排運行在一樣的Linux進程中並分享一樣的虛擬機(這些應用必須用一樣的簽名註冊)。ui
二、一個應用能夠請求權限訪問設備數據如聯繫人、短信等。全部的應用權限必須在用戶安裝的時候設定。spa
有4中不用類型的應用組件。每種類型提供了不一樣的目的、有不一樣的生命週期定義的組件如何建立和銷燬。操作系統
一、Activities
二、Services
三、Content providers ,一個content provider 管理一組被分享的應用數據。你能夠把這些數據存儲在系統文件中、數據庫中、web上、或是其餘你的應用能夠訪問的持久存儲的地方。經過content provider,其餘應用能夠查詢甚至修改數據。
四、Boradcast receivers
有單獨的方法激活每種類型的組件
一、經過傳遞Intent調用startActivity()或是startActivityForResult()方法
二、經過傳遞Intent調用startService()或是bindService()方法
三、能夠定義一個broadcast經過Intent傳遞調用sendBroadcast()、sendOrderedBroadcast()或是sendStickyBroadcast()。
四、你能夠執行一個查詢給content provider經過調用ContentResolver的query()。
在android系統啓動一個應用組件以前,必須經過讀取應用的manifest文件知道他們的存在。你必需要這個文件申明全部的組件。經過在manifest文件中定義一下元素(<activity>,<service>,<receiver>,<provider>)。
Activities、services和content providers必須在manifest中申明,不然系統將不可見,沒法運行。然而,broadcast receivers除了在manifest中申明也能夠在代碼中動態建立,經過調用registerReceiver()方法。
申明的功能若是設備不支持的話,應用將沒法安裝,你也能夠申明這個功能但不請求他,但必須設置required爲false,這樣能夠確保運行環境中有這個功能,可是不會使用它們。
<uses-feature android:name="android.hardware.camera.any"
android:required="false" />