你的Android应用正在前台光鲜亮丽,而它的背后,Service才是真正的劳模。
01 什么是Service?安卓世界的幕后工作者
说到Android组件,大多数人首先想到的是Activity——那个拥有华丽界面、与用户直接交互的“前台明星”。而Service,则是应用家族中那位从不露脸却功不可没的幕后工作者。
与Activity不同,Service没有图形化界面,通常用来处理耗时较长的操作,比如更新ContentProvide、发送Intent以及启动系统通知等。
想象一下,当你打开音乐应用播放歌曲,然后切回微信聊天时,音乐为何不会停止?这正是Service在后台默默工作的结果。
它不在乎是否被人看见,只专注于自己的任务:在后台执行长时间运行的操作,不需要和用户交互。
但有一点需要特别注意:尽管Service在后台工作,但它默认并不会运行在子线程中,也不会运行在一个独立的进程中,它同样执行在UI线程中。
这意味着,如果你在Service中执行耗时操作,必须手动创建子线程,否则会阻塞主线程,导致应用无响应。
02 Service不是啥?走出常见理解误区
很多初学者容易混淆Service与线程、进程的概念,这里需要划重点:Service不是一个单独的进程,也不是一个线程。
那么进程和线程到底是什么呢?进程是具有一定独立功能的程序关于某个数据集合上的一次运行活动,是系统进行资源分配和调度的一个独立单位。
线程则是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位。
一个简单的理解是:一个程序至少有一个进程,一个进程至少有一个线程。
而Service,只是Android系统中的一个组件,它依赖于创建服务时所在的应用程序进程。当某个应用程序进程被杀掉时,所有依赖于该进程的Service也会结束运行。
这就解释了为什么你在任务管理器中关闭一个应用后,它的Service也会随之停止。因此,把Service当作线程使用是完全错误的理解,它们根本是两个不同层面的概念。
03 Service生命周期:从诞生到谢幕的完整旅程
如同Activity一样,Service也有自己的生命周期。理解这个周期,是正确使用Service的关键。
Service在Android中的生命周期主要经历以下四个状态:创建(CREATED)、启动(STARTED)、停止(DESTROYED)。
具体来说,当你第一次点击StartService按钮时,会依次调用onCreate()→onStartCommand();第二次调用时只会触发onStartCommand();点击endService按钮时则会调用onDestory()。
根据启动方式的不同,Service的生命周期路径也有所区别:

最低0.47元/天 解锁文章

被折叠的 条评论
为什么被折叠?



