在此圖的不同進程裡,各有其主線程(Thread),這些線程可並行
(Concurrent)執行,形成多線程(Multiple-Thread)的執行環境。例如上圖 4-14,
myActivity1 和 myActivity2 並行執行,並透過 C++層的 JavaBBinder 類而共
享(可能並行)了 Java 層的 myService 類之服務。
認識主線程
在 Android 裏,於預設情形下,一個應用程式內的各元件(如 Activity、
BroadcastReceiver 或 Service 等)都會在同一個進程(Process)裏執行,而且由該
進程的主線程負責執行之。在 Android 裏,如果有特別指示,也可以讓特定元
件在不同的進程裏執行。無論元件在那一個進程裏執行,於預設情形下,他
們都是由該進程裏的主線程來負責執行之。例如下述的範例,由一個 Activity
啟動一個 Service,兩者都在同一個進程裏執行。
那麼,主線程除了要處理 Activity 元件的 UI 事件,又要處理 Service 幕後
服務工作,通常會忙不過來。該如何化解這種困境呢? 此時,多線程
(Multi-thread)的並行(Concurrent)概念了,其可以化解主線程太過於忙碌的情
形。也就是說,主線程可以誕生多個子線程來分擔其工作,尤其是比較冗長
費時的幕後服務工作,例如播放動畫的背景音樂、或從網路下載映片等。於
是,主線程就能專心於處理 UI 畫面的事件了。
關於 Remote Service
剛才的範例裏的Activity、Service 和 BroadcastReceiver 三者都是由該APK
的預設進程裏執行。由於三者都是在同一進程裏執行,所以它們之間的通訊
是屬於進程內的短距通訊。同時,也都由該預設進程裏的主線程負責執行之。
那麼,如果 Activity、Service 和 BroadcastReceiver 三者並不是在同一個進
程裏執行時,它們之間的通訊就是跨進程通訊(IPC, Inter-Process
Communication)了。當 Activity 與 Service(或 BroadcastReceiver)之間採用 IPC
通訊時,意味著兩者分別在不同的進程裏執行,此時基於一般原則:
『於預設情形下,Activity、BroadcastReceiver 或 Service 都是由其所屬進
程裏的主線程負責執行之。』
可知,雙方是分別由不同(進程)的主線程來執行之。請先看個範例,它由一個
Activity 啟動一個遠距的 Service,兩者分別在不同的進程裏執行。如下述 XML
檔案內容:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"