《 Service具體解釋(一):什么是Service》
《 Service具體解釋(二):Service生命周期》
《Service具體解釋(三):Service的使用》
《Service具體解釋(四):綁定服務 與 通信》
《Service具體解釋(五):使用Messager進行通信》
《Service具體解釋(六):進程間通信-AIDL》
Service是Android中經常使用組件之中的一個,它是Android中實現程序后台執行的解決方式,它非常適合用於去執行那些不須要和用戶交互且還要長期執行的任務。
這里的后台並非子線程的意思。Service默認並不會執行在子線程中。它也不會執行在一個獨立的進程中,它相同執行在UI線程中,因此,不要在Service中執行耗時的操作。假設須要執行耗時的操作,能夠在Service中創建子線程來完畢耗時操作。
Service的執行不依賴於不論什么用戶界面,及時程序被切換到后台或者用戶打開了另外一個應用程序,Service仍然能夠保持正常執行。這也正式Service的使用場景。
當某個應用程序進程被殺掉時,全部依賴於該進程的Service也會停止執行。
Service 與 Thread的差別
非常多時候,你可能會問,為什么要用 Service。而不用 Thread 呢。由於用 Thread 是非常方便的,比起 Service 也方便多了,以下我具體的來解釋一下。
1). Thread:Thread 是程序執行的最小單元,它是分配CPU的基本單位。能夠用 Thread 來執行一些異步的操作。
2). Service:Service 是android的一種機制,當它執行的時候假設是Local Service。那么相應的 Service 是執行在主進程的 main 線程上的。如:onCreate。onStart 這些函數在被系統調用的時候都是在主進程的 main 線程上執行的。假設是Remote Service,那么相應的 Service 則是執行在獨立進程的 main 線程上。因此請不要把 Service 理解成線程,它跟線程半毛錢的關系都沒有!
上面的描寫敘述還是不夠直觀,要想真正理解Service與Thread的差別,我么要沖android的系統機制或者功能上來分析了。
首先Service是Context的子類,所以你能夠在Service中調用Context的全部方法。同一時候你也能夠在不論什么有Context的地方調用Context.startService、Context.stopService、Context.bindService,Context.unbindService。來控制它,你也能夠在 Service 里注冊 BroadcastReceiver。在其它地方通過發送 broadcast 來控制它,當然這些都是 Thread 做不到的。
很多其它關於Service與Thread的差別,等我們漸漸的學習Service之后。對Service有了全面的了解之后,我們就會深有體會了。