轉android-Service和Thread的區別
servie是系統的元件,它由系統程式託管(servicemanager);它們之間的通訊類似於client和server,是一種輕量級的ipc通訊,這種通訊的載體是binder,它是在linux層交換資訊的一種ipc。而thread是由本應用程式託管。
1). Thread:Thread 是程式執行的最小單元,它是分配CPU的基本單位。可以用 Thread 來執行一些非同步的操作。
2). Service:Service 是android的一種機制,當它執行的時候如果是Local Service,那麼對應的 Service是執行在主程式的 main 執行緒上的。如:onCreate,onStart 這些函式在被系統呼叫的時候都是在主程式的main 執行緒上執行的。如果是Remote Service,那麼對應的 Service 則是執行在獨立程式的 main 執行緒上。
既然這樣,那麼我們為什麼要用 Service 呢?其實這跟 android 的系統機制有關,我們先拿 Thread 來說。Thread 的執行是獨立於 Activity 的,也就是說當一個 Activity 被 finish 之後,如果你沒有主動停止Thread 或者 Thread 裡的 run 方法沒有執行完畢的話,Thread 也會一直執行。因此這裡會出現一個問題:當 Activity 被 finish 之後,你不再持有該 Thread 的引用。另一方面,你沒有辦法在不同的 Activity 中對同一 Thread 進行控制。
舉個例子:如果你的 Thread 需要不停地隔一段時間就要連線伺服器做某種同步的話,該 Thread 需要在Activity 沒有start的時候也在執行。這個時候當你 start 一個 Activity 就沒有辦法在該 Activity 裡面控制之前建立的 Thread。因此你便需要建立並啟動一個 Service ,在 Service 裡面建立、執行並控制該 Thread,這樣便解決了該問題(因為任何 Activity 都可以控制同一 Service,而系統也只會建立一個對應 Service 的例項)。
因此你可以把 Service 想象成一種訊息服務,而你可以在任何有 Context 的地方呼叫Context.startService、Context.stopService、Context.bindService,Context.unbindService,來控制它,你也可以在 Service 裡註冊 BroadcastReceiver,在其他地方通過傳送 broadcast 來控制它,當然這些都是 Thread 做不到的。
相關文章
- Thread和Runnable的區別thread
- Task.Delay 和 Thread.Sleep 的區別thread
- Hystrix semaphore和thread隔離策略的區別及配置參thread
- Thread.currentThread().getName() 和 this.getName()區別詳解thread
- 轉發和重定向的區別?
- `std::packaged_task`、`std::thread` 和 `std::async` 的區別與聯絡Packagethread
- 使用Thread類和Runnable介面實現多執行緒的區別thread執行緒
- java面試題之Thread的run()和start()方法有什麼區別Java面試題thread
- 轉發和重定向的過程和區別
- 如何區分 Connection、Thread和SessionthreadSession
- input屬性disabled和readonly的區別(轉)
- 【轉】理解 CI 和 CD 之間的區別
- Vue中computed和watch的區別(轉載)Vue
- Android-Service詳解Android
- 強制型別轉換(int)、(int&)和(int*)的區別型別
- String.valueOf和強制型別轉換(String)的區別型別
- ../和./和/的區別
- LinkedList和ArrayList的區別、Vector和ArrayList的區別
- http和https的區別/get和post的區別HTTP
- ||和??的區別
- /*和/**的區別
- GO語言中string和[]byte的區別及轉換Go
- 塊元素和行內元素的區別與轉換
- VUE的兩種跳轉push和replace對比區別Vue
- jquery $(this) 和this的區別jQuery
- JQuery this和$(this)的區別jQuery
- T和?的區別
- makefile =和:=的區別
- ++a和a++的區別
- ./ 和sh 的區別
- [轉載] spring aop 環繞通知around和其他通知的區別Spring
- 【轉載】Maven中-DskipTests和-Dmaven.test.skip=true的區別Maven
- [轉帖]盤點selenium4和selenium3的區別
- 和區別
- Reactor中的Thread和SchedulerReactthread
- springmvc和springboot的區別SpringMVCSpring Boot
- SDK和API的區別?API
- ArrayList和LinkedList的區別?
- button和submit的區別MIT