Android Service的bindService和startService混合使用及其关闭分析

来源:互联网 发布:书法集字软件 编辑:程序博客网 时间:2024/05/19 14:02

面试一个公司,和那边技术负责人讨论了一个关于启动一个Service,首先问了我一下有什么启动方式,然后各自生命周期是怎样的,都一一回答,接着就问如果一个Service通过两种方式使用,然后怎么进行关闭,这个问题倒从没思考过,也没有这样做过这样的业务处理。我理解的是在Service 业务处理完,Service自己进行stopself()关闭即可。下面进行一下综合分析及总结。

1.startService启动方式过程及生命周期:
onCreate()–> onStartCommand()/onStart()—> onDestory();
1)创建服务onCreate()在整个生命周期仅执行一次,每次调用服务都会执行onStart()或onStartCommand();
2)停止服务onDestory()在整个生命周期仅执行一次
3)服务一旦启动,生命周期将不受限于UI线程。应用(Activity)终止,服务仍然在后台运行;
4)直接启动的服务,其它应用不能调用其中的功能。


2.bindService绑定方式过程及生命周期:
onCreate() —> onBind() —> onUnbind()–> onDestory();
1)创建服务onCreate()在整个生命周期仅执行一次;
2)每次调用服务必须首先bindService/onBind,执行unbindService/onUnbind后不能调用;
3)服务的生命周期受限于UI线程。一旦应用(Activity)终止,服务将onDestory销毁;
4)可以在绑定后调用服务里的功能。


1.如果先bindService,再startService:
在bind的Activity退出的时候,Service会执行unBind方法而不执行onDestory方法,因为有startService方法调用过,所以Activity与Service解除绑定后会有一个与调用者没有关连的Service存在
2.如果先bindService,再startService,再调用Context.stopService
Service的onDestory方法不会立刻执行,因为有一个与Service绑定的Activity,但是在Activity退出的时候,会执行onDestory,如果要立刻执行stopService,就得先解除绑定

3 先startService,再bindService。

首先在主界面创建时,startService(intent)启动方式开启服务,保证服务长期后台运行;
然后调用服务时,bindService(intent, connection, BIND_AUTO_CREATE)绑定方式绑定服务,这样可以调用服务的方法;

调用服务功能结束后,unbindService(connection)解除绑定服务,置空中介对象;
最后不再需要服务时,stopService(intent)终止服务。


阅读全文
1 0