標籤:res href htm query int 下載 ast ons 應用
每一個應用程式都有自己獨立的運行沙箱(授予應用程式代碼的訪問權)
- Android作業系統是一個多使用者的Linux系統,其中的每一個應用程式都是一個獨立的使用者。
- 系統會為每一個應用程式分配一個唯一的Linux使用者ID,系統為一個應用程式的所有檔案 設定了許可權,所以,只有分配給這個應用程式的使用者ID可以訪問它們。
- 每一個進程有它主機的虛擬機器 (VM), 所以一個應用程式的代碼會獨立與其它的應用程式運行。
- 每一個應用程式在它自己的Linux進程中運行。當沒有任何組件被調用或者系統需要為其它應用程式回收記憶體的時候,就會 關閉這個進程。
應用程式的組件
Activity
一個 activity 為一個使用者互動提供一個單獨的介面,每個應用程式 是由多個 activity 組成
它為使用者提供一個用於任務互動的畫面。例如,撥打到電話,拍照,發郵件。或者查看地圖。每一個activity都被分配一個視窗。在這個視窗裡,你可以繪製使用者互動的內容。 這個視窗通常佔滿螢幕,但也有可能比螢幕小,並且浮在其它視窗的上面。
Service(服務元件)
一個 service是一個運行在背景組件。它用於執行耗時操作或者遠程進程。 一個service並不提供使用者互動介面。
例如,當使用者在使用另外一個程式的時候,一個服務可能在播放音樂或者在 通過網路擷取資料,這樣不會阻塞住使用者與activity的互動。其它的組件,例如一個activity,可以啟動一個service並讓其運行或者與其綁定,綁定後可以與其互動。
Content provider(內容提供組件)
一個content provider負責管理應用程式的資料共用集。
你可以通過檔案系、SQLite資料庫、網站,或者其它的你的應用程式可以訪問的持久化儲存位置來儲存資料。 通過content provider,其它的應用程式可以查詢甚至修改你的資料(如果這個content provider允許它們這麼做)。 例如,Android系統提供了一個content provider來管理連絡人資訊。 同樣地,任何程式擁有了適當許可權都可以查詢這個content provider (例如 ContactsContract.Data) 去讀寫某人的資訊。
Broadcast receiver(廣播接收組件)
broadcast receiver 是一個用來響應系統範圍內的廣播的組件。 很多廣播發自於系統本身。—例如, 通知螢幕已經被關閉、電池低電量、照片被拍下的廣播。 應用程式也可以發起廣播。—例如, 通知其它程式,一些資料被下載到了裝置,且可供它們使用。 雖然廣播並不提供使用者互動介面,它們也可以建立一個狀態列通知 來提醒使用者一個廣播事件發生了。儘管如此,更多的情形是,一個廣播只是進入其它組件的一個“門路”,並試圖做一些少量的工作。 例如,它可能發起一個服務,並通過服務執行與這個廣播事件相關的工作。
啟用組件
—activitie, service, 和 broadcast receiver—是被一個叫做 intent的非同步訊息啟用的。 Intent把不同的獨立的組件在運行期綁定在一起(你可以把它們當作從其它組件中請求動作的訊息), 無論這些組件屬於你的或者其它的程式。
對於activity和service來說,一個intent定義了將要執行的動作
對broadcast receiver來說, intent只是簡單地定義了需要廣播的公告
content provider, 不是用intent來啟用。 相對地,它是由一個 ContentResolver 發起的一個指向它的請求啟用的。
這個content resolver掌握了所有content provider的直接事務,所以用這個provider來執行事務的組件不需要直接執行而是調用這個 ContentResolver 對象的方法。 它在content provider和這個組件請求資訊之間放置了一個抽象層(為了安全)。
啟用各種類型組件有不同的方法:
- 你可以啟動一個activity(或者讓讓它來做一些新的工作)通過傳遞一個
Intent給startActivity() 或者 startActivityForResult() (當你想讓一個activity為你返回一個結果)。
- 你可以啟動一個service(或者給一個正在啟動並執行service發送新的指令)通過傳遞一個
Intent 給 startService()。 或者你可以綁定一個服務通過傳遞一個Intent 給 bindService()。
- 你可以初始化一個broadcast通過傳遞一個
Intent給一些方法像 sendBroadcast(), sendOrderedBroadcast(), 或者 sendStickyBroadcast()。
- 你可以讓content provider執行一個查詢操作通過調用
ContentResolver的query() 方法。
設定檔
在Android系統能夠啟動一個程式組件之前, 系統必須通過讀取程式的AndroidManifest.xml 檔案
你的程式必須在這個檔案中聲明它所有的組件。除了聲明程式組件外,這個設定檔還做一些其它的工作,例如:
- 確定程式需要哪些使用者權限,例如網路訪問或者讀取使用者的連絡人。
- 聲明程式需要的最小的 API Level 這個要參照程式都使用了哪些API。
- 聲明程式使用或要求的硬體和軟體特性,例如相機,藍芽服務,或者多點觸屏。
- 程式需要連結的API類庫(除Android framework API之外的類庫),例如 Google Map類庫。
- 其它
Intent
intent最牛逼的地方其實是它的動作(action)概念, 使用action,你可以簡單地描述以下你想執行的動作(並且你也可以指定你想把哪些資料放在這個動作上) 並且允許系統去尋找裝置上可以執行這個動作的組件並啟動它。如果有多個組件可以執行這個動作,那麼由使用者來決定哪個去執行。
Android 開發組件