服务service生命周期及方法使用

服务service生命周期及方法使用

本文主要从四大组件service的开关绑定的4个方法开始,自己总结出的一些细节特点,供大家参考!如有纰漏和错误请大家指出!如需转载请标明出处,谢谢!—下一篇为《Service交互特征》,同时会上传Demo,敬请期待!

startService():开启服务-让服务在后台默默工作

  1. 可以重复运行,重复只会运行onStartCommand
  2. 返回ComponentName(标识唯一的应用程序组件)对象主要成员为包名+完整class类名(可以通过类名查询服务是否运行)
  3. 未绑定运行:构造-onCreate-onStartCommand
  4. 已绑定运行:onStartCommand
  5. service已经运行:onStartCommand
  6. service运行后即使退出应用,也不会自动停止
  7. 服务与应用无法进行数据交互,方法调用等

stopService():停止服务

  1. 可重复运行,运行返回boolean-重复运行返回false或标记为停止
  2. service已经运行未绑定:onDestroy-销毁内存实例
  3. service已经运行已绑定:无效并返回true-标识为停止
  4. stopSelf();服务自身调用,与stopService功能一致
    标记为停止:服务并未停止或销毁,如果一个已启动并标记为停止的服务在完全解绑时彻底销毁

bindService():绑定服务-与服务交互

  1. 可以重复运行,但重复运行-每运行成功一次必然回调一次onServiceConnected,onBind()只运行一次
  2. 服务未开启时:构造-onCreate-onBind-回调onServiceConnected
  3. 服务已开启且未绑定时:onBind()-回调
  4. 服务已开启且已绑定过:只执行回调
  5. 未解绑退出绑定的activity会有报错Log ServiceConnectionLeaked
  6. onServiceDisconnected()只有要非正常结束服务时调用
  7. 支持多绑定,服务与应用可以进行数据交互,方法调用等

unbindService()

  1. 同一绑定对象不能重复使用,否则报错
  2. 未绑定运行会抛出异常“Service not registered”,使用时判断是否绑定
  3. 未开启(未使用startService)已绑定且无多绑定:onUnBind-onDestroy-销毁内存实例
  4. 未开启已绑定且有其它绑定:只解绑(多绑定时只在服务中标记此绑定解除,此时不运行onUnBind)
  5. 已开启且完全解绑(多绑定时,没有任何其它绑定):onUnBind,在一次开启和关闭服务过程中只运行一次。
  6. 已开启且完全解绑且已标识停止:onUnBind-onDestroy-销毁内存实例
  7. 判断服务是否绑定采用在ServiceConnection添加一个boolean成员变量的方式,在onServiceConnected赋值为true;onServiceDisconnected赋值为false;并在unbindService使用时同时调用setBind(false)
  8. 未解绑activity退出时:日志报错(运行时异常)并自动运行unbindService

使用注意点

  1. 应用与服务交互时使用bindService
  2. 使用了startService应用退出服务不会停止
  3. 绑定后activity退出时自动运行unbindService
  4. 解绑时建议先判断绑定状态
  5. 服务运行在主线程,耗时任务开子程线运行
  6. 在未完全(多绑定)解绑时,stopService和stopSelf起标识停止的作用
  7. 以上方法均支持跨进程
  8. 跨进程问题后续详解
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值