activity, service,task, process and thread之間到底是什麼關系呢?
首先我們來看下task的定義,google是這樣定義task的:a task is what the user experiences as an "application." it's a group of related activities, arranged in a stack. a task is a stack of activities, not a class or an element in the manifest file. 這意思就是說task實際上是一個activity棧,通常使用者感受的一個application就是一個task。從這個定義來看,task跟
service或者其他components是沒有任何聯系的,它隻是針對activity而言的。
而service和activity隻是android提供的components中的兩種,除此之外還有content provider和broadcast receiver。
通常情況下,對于一個應用程式的所有的components都會在同一個process産生的main thread中運作。但是我們也可以讓不同的component運作在不同的process當中,我們可以通過設定這些components的屬性來使其運作在不同的process當中,例如:<activity android: process = "processa">。當然我們也可以設定使他們運作在同一個process當中,即使他們不在同一個應用程式當中也可以(前提是這些應用程式使用的是同一個linux
user id,并且被同一個機構簽名)。
那麼thread跟這些components又有什麼關系呢?
通常我們會将一些長時間或大計算量的操作用一個單獨的線程來運作,以防止類似操作阻塞process。比如我們可以為一個service(如播放音樂的service)産生一個thread,我們也可以為methods來産生一個線程。總之當你不想讓某些操作阻塞main thread的時候,create a thread!