20170921 星期四
這篇文章從應用程式(Application)的高度來描述在開發Android APP時所需要的開發知識,每個應用程式的根目錄都必須包含 AndroidManifest.xml 檔案 (名稱要一字不差)。 宣示說明檔案可向 Android 系統顯示應用程式的基本資訊,也就是說系統在執行該應用程式的任何程式碼之前必須具備的資訊。
宣示說明檔AndrodiManifest.xml的檔案結構
下圖顯示宣示說明檔案的一般結構和可納入其中的元素。 每個元素和其所有屬性都會完全記錄在個別檔案中。
組成應用程式的元件,許多元件都會對應到 Java 物件,包括應用程式本身的元素 ( <application> 元素) 與其主要元件:Activity (<activity>)、服務 (<service>)、廣播接收器 (<receiver>) 以及內容供應程式 (<provider>)。為實作每個元件的類別命名以及發佈類別的功能 (例如,類別可處理的 Intent 訊息)。 這些宣告可讓 Android 系統瞭解元件為何以及可在哪些情況下啟動。除了能聲明程序中的Activities, ContentProviders, Services, 和Intent Receivers,還能指定permissions和instrumentation。
<?xml version="1.0" encoding="utf-8"?>
<manifest>
<uses-permission/>
<permission/>
<permission-tree/>
<permission-group/>
<instrumentation/>
<uses-sdk/>
<uses-configuration/>
<uses-feature/>
<supports-screens/>
<compatible-screens/>
<supports-gl-texture/>
<application>
<activity>
<intent-filter>
<action/>
<category/>
<data/>
</intent-filter>
<meta-data/>
</activity>
<activity-alias>
<intent-filter> . . . </intent-filter>
<meta-data/>
</activity-alias>
<service>
<intent-filter> . . . </intent-filter>
<meta-data/>
</service>
<receiver>
<intent-filter> . . . </intent-filter>
<meta-data/>
</receiver>
<provider>
<grant-uri-permission/>
<meta-data/>
<path-permission/>
</provider>
<uses-library/>
</application>
</manifest>
Application元素的屬性
應用程式的宣告。應用程式元素可包括許多的子元素,許多子元素(例如 icon
, label
, permission
, process
, taskAffinity
, 和 allowTaskReparenting
)可以設定值,而這些值可以設定應用程式的名稱、圖示、標題、主題等資訊。例如「android:icon」屬性可指定這個應用程式的代表圖示。「android:label」屬性代表的是應用程式的名稱,另一個是「android:theme」屬性,theme意思是「主題」,在Android中將元件外觀的資訊我們稱為一個樣式(style),而將樣式套用在整個應用程式或單一畫面中,就稱為theme。
<?xmlversion="1.0"encoding="utf-8"?>
<manifest . . . >
<application . . . >
<activity android:name="com.example.project.FreneticActivity"
android:icon="@drawable/small_pic.png"
android:label="@string/freneticLabel" . . . >
</activity> . . . </application>
</manifest>
Activity元素的屬性
一個activity代表一個使用者介面者的螢幕視窗,簡單說一個Activity執行在螢幕上的動作,例如一個email 應用程式可能有一個activity 顯示新的emails列表,另外一個activity去編輯一個email, 而另一個activity去讀email的內容。假如一個應用程式有多個activity,我們則要在應用程式開啟時指定一個activity作動作。一個activity是被放置在Activity 類別內,定義如下所示 −
public class MainActivity extends Activity{
}
activity元素內還有「intent-filter」元素,代表該Activity類別會在本應用程式啟動時被第一個執行,也就是一個APP的第一個出現的畫面類別。
Intent Filter
Intent 可以被想像成 Android 當中的事件,用來串連 Android 中的 Activity 與 Service 等元件。每當一個 Activity 想執行一個操作時,會創建出一個 intent,該 intent 描述了 Activity 想要做甚麼事、想處理什麼類型的資料等。
Android 會比較 Intent 與 AndroidManifest.xml 中的 <intent-filter> 內容,以尋找最合適的 Activity 來處理回應 Intent 的請求。
Intent 可以直接指定元件名稱,Android 會根據 AndroidManifest.xml 檔案中的宣告找出該元件並啟動之。但是如果 Intent 沒有指定對象的元件名稱,Android 會透過 <intent-filter> 去找出最適當的元件回應 Intent ,<intent-filter> 指定了元件可以回應的 Intent 類型,
Services
用來處理與應用程式相關的背景程式。它在背景執行長時間的操作。例如當使用者在使用不同的應用程式時,一個服務可能在背景持續地播放音樂。它可能在背景執行擷取資料的工作,不會阻礙使用者和某一個activity的互動性。
一個serivce是被放置在Service 類別內,定義如下所示 −
public clas MyService extends Service{
}
Broadcast Receivers
用來處理Android OS與應用程式之間的通訊。
Content Providers
用來處理資料及資料庫管理的工作。
參考資料:https://developer.android.com/guide/topics/manifest/manifest-intro.html?hl=zh-tw