您的位置:首页 > 其它

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

2016-11-23 00:14 134 查看

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

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

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

可以重复运行,重复只会运行onStartCommand

返回ComponentName(标识唯一的应用程序组件)对象主要成员为包名+完整class类名(可以通过类名查询服务是否运行)

未绑定运行:构造-onCreate-onStartCommand

已绑定运行:onStartCommand

service已经运行:onStartCommand

service运行后即使退出应用,也不会自动停止

服务与应用无法进行数据交互,方法调用等

stopService():停止服务

可重复运行,运行返回boolean-重复运行返回false或标记为停止

service已经运行未绑定:onDestroy-销毁内存实例

service已经运行已绑定:无效并返回true-标识为停止

stopSelf();服务自身调用,与stopService功能一致

标记为停止:服务并未停止或销毁,如果一个已启动并标记为停止的服务在完全解绑时彻底销毁

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

可以重复运行,但重复运行-每运行成功一次必然回调一次onServiceConnected,onBind()只运行一次

服务未开启时:构造-onCreate-onBind-回调onServiceConnected

服务已开启且未绑定时:onBind()-回调

服务已开启且已绑定过:只执行回调

未解绑退出绑定的activity会有报错Log ServiceConnectionLeaked

onServiceDisconnected()只有要非正常结束服务时调用

支持多绑定,服务与应用可以进行数据交互,方法调用等

unbindService()

同一绑定对象不能重复使用,否则报错

未绑定运行会抛出异常“Service not registered”,使用时判断是否绑定

未开启(未使用startService)已绑定且无多绑定:onUnBind-onDestroy-销毁内存实例

未开启已绑定且有其它绑定:只解绑(多绑定时只在服务中标记此绑定解除,此时不运行onUnBind)

已开启且完全解绑(多绑定时,没有任何其它绑定):onUnBind,在一次开启和关闭服务过程中只运行一次。

已开启且完全解绑且已标识停止:onUnBind-onDestroy-销毁内存实例

判断服务是否绑定采用在ServiceConnection添加一个boolean成员变量的方式,在onServiceConnected赋值为true;onServiceDisconnected赋值为false;并在unbindService使用时同时调用setBind(false)

未解绑activity退出时:日志报错(运行时异常)并自动运行unbindService

使用注意点

应用与服务交互时使用bindService

使用了startService应用退出服务不会停止

绑定后activity退出时自动运行unbindService

解绑时建议先判断绑定状态

服务运行在主线程,耗时任务开子程线运行

在未完全(多绑定)解绑时,stopService和stopSelf起标识停止的作用

以上方法均支持跨进程

跨进程问题后续详解
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息