1. 程式人生 > >安卓API指南之應用基礎知識簡介

安卓API指南之應用基礎知識簡介

本系列的文章全部為學習摘要,不偏重各種細節展示,更多的是安卓體系重要節點的羅列,並適時加入少量自己的理解分析,以便能快速的回顧安卓體系結構和那些重要的技術點。

安卓apk檔案安裝到裝置後,成為裝置中的一個應用,每個應用都在其自己的 Linux 程序內執行,每個程序都具有自己的虛擬機器 (VM),預設情況下,系統會為每個應用分配一個唯一的 Linux 使用者 ID,因此應用程式碼是在與其他應用隔離的環境中執行。

預設情況下,每個應用都只能訪問執行其工作所需的元件,而不能訪問其他元件。不過,應用仍然可以通過一些途徑與其他應用共享資料以及訪問系統服務

  • 可以安排兩個應用共享同一 Linux 使用者 ID,具有相同使用者 ID 的應用在同一 Linux 程序中執行,並共享同一 VM(應用還必須使用相同的證書籤署)。

  • 應用可以請求訪問裝置資料(如相機、藍芽等)的許可權。 使用者必須明確授予這些許可權。

1、應用元件

  • Activity 表示具有使用者介面的單一螢幕;

  • 服務是一種在後臺執行的元件,用於執行長時間執行的操作或為遠端程序執行作業;服務作為 Service 的子類實現;

  • 內容提供程式管理一組共享的應用資料。您可以將資料儲存在檔案系統、SQLite 資料庫、網路上或您的應用可以訪問的任何其他永久性儲存位置。 其他應用可以通過內容提供程式查詢或修改資料,,內容提供程式作為 ContentProvider 的子類實現;

  • 廣播接收器是一種用於響應系統範圍廣播通知的元件。廣播接收器不顯示介面,但可以建立狀態列通知,在發生廣播事件時提醒使用者。廣播接收器作為 BroadcastReceiver 的子類實現,並且每條廣播都作為 Intent 物件進行傳遞;

2、啟動元件

  • 您可以通過將 Intent 傳遞到 startActivity() 或 startActivityForResult()(當您想讓 Activity 返回結果時)來啟動 Activity(或為其安排新任務)。

  • 您可以通過將 Intent 傳遞到 startService() 來啟動服務(或對執行中的服務下達新指令)。 或者,您也可以通過將 Intent 傳遞到 bindService() 來繫結到該服務。

  • 您可以通過將 Intent 傳遞到 sendBroadcast()、sendOrderedBroadcast() 或 sendStickyBroadcast() 等方法來發起廣播;

  • 您可以通過在 ContentResolver 上呼叫 query() 來對內容提供程式執行查詢。

3、宣告元件

清單檔案的主要任務是告知系統有關應用元件的資訊,也會宣告一些裝置許可權和應用所有許可權等。宣告一般包括:

  • Application的< application >元素

  • Activity 的 < activity > 元素

  • 服務的 < service > 元素

  • 廣播接收器的 < receiver> 元素

  • 內容提供程式的 < provider > 元素

未在清單檔案中宣告的 Activity、服務和內容提供程式對系統不可見,因此也永遠不會執行。 不過,廣播接收器可以在清單檔案中宣告或在程式碼中動態建立(如 BroadcastReceiver 物件)並通過呼叫 registerReceiver() 在系統中註冊。

4、宣告元件功能

顯示Intent主要是啟動其它元件。隱式 Intent 的作用是描述要執行的操作型別,讓系統能夠在裝置上找到可執行該操作的元件,並啟動該元件。 如果有多個元件可以執行 Intent 所描述的操作,則由使用者選擇使用哪一個元件。

系統通過將接收到的 Intent 與裝置上的其他應用的清單檔案中提供的 Intent 過濾器進行比較來確定可以響應 Intent 的元件。由此相當於聲明瞭這個元件的功能。

Service在api21時不再推薦使用隱式啟動,會丟擲異常;

BroadcastRecevier不支援直接啟動,都是隱式啟動,根據Intent.Action來區分。

5、應用資源

Android 應用並非只包含程式碼 — 它還需要與原始碼分離的資源,如影象、音訊檔案以及任何與應用的視覺呈現有關的內容。

對於您的 Android 專案中包括的每一項資源,SDK 構建工具都會定義一個唯一的整型 ID,您可以利用它來引用應用程式碼或 XML 中定義的其他資源中的資源。

提供與原始碼分離的資源的其中一個最重要優點在於,您可以提供針對不同裝置配置的備用資源。

作者:劉鹹尚