概述
Service 生命同期
startService 和bindService 区别
startService: onCreate -> onStartCommand -> onDestory ,在多次调用startService的时候,onCreate不重复执行,但是onStartCommand会执行。startService调用了这后,会一直存在,直到其调用了stopService。
bindService : onCreate -> onBind -> onUnbind -> onDestory,多次调用bindService,onCreate及onBind都只执行一次。它生命周期跟随其调用者,调用者释放的时候,必须对该Service解绑,当所有绑定全部取消后,系统即会销毁该服务。 bindService 的方式通过onServiceConnected()方法,获取到Service对象,通过该对象可以直接操作到Service内部的方法,从而实现调用者与Service之间的交互。
startService & stopService的生命周期
1、单独使用startService & stopService
2、单独使用bindService & unbindService
3、startService与bindService混合使用
使用场景:在activity中要得到service对象进而能调用对象的方法,但同时又不希望activity finish的时候service也被destroy了,startService和bindService混合使用就派上用场了。
(1)先调用startService,再调用bindService,生命周期如下:
startService(new Intent(this, MyService.class));
bindService(new Intent(this, MyService.class), mServiceConnection, Context.BIND_AUTO_CREATE);
onCreate() -> onStartCommand() -> onBind()
(2)先调用bindService,再调用startService,生命周期如下:
bindService(new Intent(this, MyService.class), mServiceConnection, Context.BIND_AUTO_CREATE);
startService(new Intent(this, MyService.class));
onCreate() -> onBind() -> onStartCommand()
(3)先调用startService又调用了bindService,他们对应的是同一个service对象吗?
是的。
使用场景
- 如果想要启动一个后台服务长期进行某项任务,那么使用startService
- 如果只是短暂的使用,那么使用bindService。
- 如果想启动一个后台服务长期进行任务,且这个过程中需要与调用者进行交互,那么可以两者同时使用,或者使用startService + BroadCast / EventBus等方式
- 对于既使用startService,又使用bindService的情况,结束服务时需要注意的事项:Service的终止,需要unbindService和stopService都调用才行;
参考:
startService和bindService的区别,生命周期以及使用场景
【Android】startService和bindService混合使用总结
最后
以上就是无心雨为你收集整理的startService和bindService的使用Service 生命同期startService 和bindService 区别startService & stopService的生命周期使用场景的全部内容,希望文章能够帮你解决startService和bindService的使用Service 生命同期startService 和bindService 区别startService & stopService的生命周期使用场景所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复