Service详解(一):什么是Service

时间:2023-02-08 04:41:25

《 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有了全面的了解之后,我们就会深有体会了。