请选择 进入手机版 | 继续访问电脑版

[Android] Android Service生命周期详解

[复制链接]
查看118 | 回复9 | 2021-9-14 04:34:52 | 显示全部楼层 |阅读模式

前言

Service是Android体系 的四大组件之一。在Android体系 中,Service可以用来实验 一些必要 在后台长期运行的任务 ,也可以用来为别的 应用提供一些服务。Service的使用 方式紧张 有两种:startService()和bindService()。这两种方式下Service的生命周期不大雷同 。通过熟悉 Service的生命周期,我们可以更加深刻地明白 Android体系 中Service的工作机制。

基础知识

一个Service不是一个单独的历程 。Service本身不是运行在一个单独的历程 中,除非在AndroidManifest.xml文件中指定了android:process属性。默认环境 下,Service运行在应用地点 的谁人 历程 中。一个Service也不是一个线程。Service运行在应用的主线程中,以是 假如 要实验 耗时的后台任务 那么必要 在子线程之中实验 。

Service的生命周期

根据使用 方式的不同,Service的生命周期可以分成2条路径,详细 可以看下面这张引用自Android官网的图:

Service的生命周期.png

下面详细 分析一下这些回调方法。

  • onCreate() 当Service被创建时回调。假如 Service已经在运行,那么不会回调onCreate()方法。在onCreate()方法中,我们可以做一些初始化操作。
  • onStartCommand() 当有组件调用startService()方法启动Service时回调。在onStartCommand()方法中,我们可以实验 后台任务 。由于Service是运行在主线程之中的,以是 假如 是耗时的任务 那么必要 使用 子线程来实验 任务 。在Service完成任务 之后,必要 有组件调用stopService()方法来制止 Service,或者由Service调用stopSelf()方法来自行制止 。
  • onBind() 当有组件调用bindService()方法与Service绑定时回调。在onBind()方法中,你可以通过返回一个IBinder对象来提供一个接供词 客户端与Service举行 通讯 。
  • onUnbind() 当客户端调用unbindService()方法与Service清除 绑定时回调。
  • onDestroy() 当Service制止 运行将被烧毁 时回调。当有组件调用startService()方法来启动Service时,Service开始运行。直到有组件调用stopService()方法来制止 Service,或者由Service调用stopSelf()方法来自行制止 。当有组件调用bindService()方法与Service绑定时,Service开始运行。直到全部 的客户端与Service解绑时,Service制止 运行。在onDestroy()方法中,我们应该开释 全部 的资源,比如子线程、注册的监听器和广播吸收 器等。

总结

根据使用 方式的不同,Service的生命周期可以分成2条路径:

  • 启动Service Service在有组件调用startService()方法时创建,然后不停 运行下去。组件可以通过调用stopService()方法来制止 Service,或者Service调用stopSelf()方法来自行制止 。Service制止 之后,体系 会将其烧毁 。
  • 绑定Service Service在有组件调用bindService()方法时创建。然后客户端可以通过IBinder接口与Service举行 通讯 。客户端可以通过调用unbindService()方法来清除 绑定。多个客户端可以绑定到同一个Service,当全部 的客户端与Service解绑时,体系 会烧毁 该Service。

留意 :Service可以同时以这两种方式运行,也就是说,调用startService()方法启动Service的同时可以调用bindService()方法绑定Service。这种环境 下,只有当全部 客户端都清除 绑定,并且有组件调用stopService()方法或者Service调用stopSelf()方法才可以制止 Service。

我们可以总结出Service的2个生命期:

  • 完备 生命期 从onCreate()方法回调开始,直到onDestroy()方法回调竣事 。与Activity雷同 ,Service也在onCreate()方法中完成初始化工作,并在onDestroy()方法中开释 全部 资源。
  • 活动生命期 从onStartCommand()或者onBind()方法回调开始。对于启动Service,活动生命期与完备 生命期同时竣事 。对于绑定Service,活动生命期在onUnbind()方法回调时竣事 。

例子

这里举一个例子来实践Service的生命周期。例子代码地址:https://github.com/chongyucaiyan/ServiceDemo

demo页面如下图所示:

demo页面.png

四个按钮分别用来启动Service,制止 Service,绑定Service和解绑Service。

起首 ,我们实践下启动Service的生命周期。点击Start Service按钮启动Service。使用 LocalService关键字过滤,打印的日记 如下图所示:

启动Service的日记
.png

可以看到Service依次回调了onCreate()和onStartCommand()方法,并且两个方法都是在主线程之中实验 的。接着再点击两次Start Service按钮,打印的日记 如下图所示:

多次启动Service的日记
.png

可以看到Service运行之后,再次启动Service不会再回调onCreate()方法,只会回调onStartCommand()方法。末了 点击Stop Service按钮制止 Service,打印的日记 如下图所示:

制止
Service的日记
.png

可以看到制止 Service后,Service回调了onDestroy()方法。

然后,我们实践下绑定Service的生命周期。点击Bind Service按钮绑定Service。打印的日记 如下图所示:

绑定Service的日记
.png

可以看到Service依次回调了onCreate()和onBind()方法。接着再点击两次Bind Service按钮,可以看到Service不再回调onBind()方法,由于 同一个组件同一时间只能绑定一次。末了 单击Unbind Service按钮解绑Service,打印的日记 如下图所示:

解绑Service的日记
.png

可以看到Service依次回调了onUnbind()和onDestroy()方法。

末了 ,我们实践下同时以两种方式操作Service的生命周期。点击Start Service按钮启动Service,点击Bind Service按钮绑定Service,打印的日记 如下图所示:

启动并绑定Service的日记
.png

可以看到启动Service回调了onStartCommand()方法,绑定Service回调了onBind()方法,Service正常运行。这种环境 下,只有客户端清除 绑定,并且组件调用stopService()方法,才可以制止 Service。依次点击Unbind Service和Stop Service按钮,打印的日记 如下图所示:

制止
启动并绑定的Service的日记
.png

可以看到只有上述两种操作都实验 完毕之后,Service才回调了onDestroy()方法。

参考

到此这篇关于Android Service生命周期详解的文章就先容 到这了,更多干系 Android Service生命周期内容请搜索 脚本之家从前 的文章或继续欣赏 下面的干系 文章渴望 大家以后多多支持脚本之家!


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

avatar 甜言疯语 | 2021-9-19 06:03:10 | 显示全部楼层
好帖子!
回复

使用道具 举报

avatar 无为307 | 2021-9-21 09:56:05 | 显示全部楼层
admin楼主的帖子提神醒脑啊!
回复

使用道具 举报

avatar 缥缈的绽放山 | 2021-9-21 13:00:24 | 显示全部楼层
楼上的别说的那么悲观好吧!
回复

使用道具 举报

avatar 哗中 | 2021-10-7 14:48:23 | 显示全部楼层
学习雷锋,好好回帖!
回复

使用道具 举报

avatar 喝意调伴除 | 2021-10-8 07:40:07 | 显示全部楼层
什么狗屁帖子啊,admin楼主的语文是苍老师教的吗?
回复

使用道具 举报

avatar 千山落月坝 | 2021-10-13 04:01:40 | 显示全部楼层
白富美?高富帅?
回复

使用道具 举报

admin楼主就是我的榜样哦
回复

使用道具 举报

好东西,赞一个!
回复

使用道具 举报

admin楼主给脑残下了定义!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则