進行Android調用服務時,你的程式只需要建立一個intent對象,這個intent對象包含請求的資料,並調用startActivity(),當前的acitivity被彈出棧,之前的activity成為正在啟動並執行。
被啟用的activity可以通過調用 getIntent() 方法擷取啟用它的intent。Android調用服務acitivity的onNewIntent() 方法來傳送其他後來的intent。註:一個activity可以同時被多個intent啟用)Activity經常會調用其他的activity,如果它需要被調用的activity返回的資料,可以調用startActivityForResult() 方法,而不是 startActivity()。
例如,某個activity調用另外一個activity用來讓使用者選擇一個圖片,另外一個activity應該返回使用者選擇的圖片。結果通過第一個activity的onActivityResult() 返回,返回的形式也是intent。service通過調用 Context.startService()被開始。Android調用服務的onStart() 方法,並把intent傳送給它。
類似的,intent可以通過 Context.bindService() 方法建立同正在啟動並執行服務的聯絡。服務通過onBind() 方法擷取intent。如果服務沒有啟動, bindService() 方法可以選擇是否啟動服務。例如,一個activity可能會想建立與後台播放音樂的服務的通訊。
這樣使用者就可以通過activity控制背景播放。因此activity可能會調用 bindService() 方法來建立串連,然後再調用service公開的介面。程式可以調用Context.sendBroadcast(), Context.sendOrderedBroadcast(), 和Context.sendStickyBroadcast()來傳遞intent初始化一個broadcast。broadcast 通過 onReceive() 方法接收。
在Android開始一個應用程式之前,它必須知道有哪些檔案,因此程式必須在一個manifest檔案中聲明所有用到的組件。這些聲明的組件會被編譯到apk檔案中。.apk 檔案含有程式原始碼和資源。
註:相當於專案檔)裝箱單是一個xml檔案,在所有的程式中命名都是AndroidManifest.xml 。它還有一些其他 的功能,如:指明需要串連的庫、識別程式希望被授與權限。
但是裝箱單的主要任務還是向android聲明程式的組件。一份裝箱單的例子:
- <?xml version="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> 節點的name 屬性指明了 Activity 的類名. icon 和 label 屬性指明了展示activity時用到的資源。另一個節點的含義差不多 — <service> 是用來聲明services的, <receiver> 用來聲明broadtcast。
Android調用服務聲明 content providers. Activities, services。 content providers需要聲明,對系統不可見。另外, broadcast receivers可以不在裝箱單中聲明,可以動態得在代碼中聲明。
(見BroadcastReceiver 對象)通過 Context.registerReceiver()方法向系統註冊。對使用者來說,即使地圖程式是定義在另外一個程式中、在另外一個進程中運行,但是它看起來好像你的程式的一部分。
Android通過將2個activities放在用一個任務中,使得使用者有這樣的體驗。這一系列的activities,安排在一個堆棧中。堆棧中的根activity是任務的開始,或者說是使用者選擇的應用程式的第一個activity。堆棧頂部的activity 是當前正在啟動並執行activity— 目前正在吸引使用者注意的一個。
當一個activity啟動另外一個的時候,新的activity被壓棧,變為當前activity. 之前的activity 還在任務中。當使用者點擊後退BACK)鍵,當前的acitivity被彈出棧,之前的activity成為正在啟動並執行。