思考:
想使用Service方法,还不想退出的时候关闭Service,该怎么做呢?
做法:
先通过startService方式开启服务,然后再绑定,使用结束之后再解绑,然后再停止服务
启动 Service 有两种方式
通过startServer() 启动Service 和 通过bindService() 启动Service
服务的特性:
1.服务不能自己运行,需要通过调用Context.startService()或Context.bindService()方法启动服务;
2.使用startService()方法启用服务,调用者与服务之间没有关连,即使调用者退出了,服 务仍然运行。
3.使用bindService()方法启用服务,调用者与服务绑定在了一起,调用者一旦退出,服务也就终止,大有“不求同时生,必须同时死”的 特点。
比较:
1. 生命周期:
第一种:通过startServer() 启动Service
生命周期:
onCreate()- >onStart()(可多次调用)--服务运行->onDestroy()
如果Service还没有运行,则android先调用onCreate(),然后调用onStart();
如果Service已经运行,则只调用onStart(),所以一个Service的onStart方法可能会重复调用多次。
开启者调用stopService的时候直接onDestroy,
如果是开启者自己直接退出而没有调用stopService的话,Service会一直在后台运行。
该Service的开启者再启动起来后可以通过stopService关闭Service。
第二种:通过bindService() 启动Service 该方式提供了Context,例如活动等组件调用Sercive内部方法的机制。
生命周期:
onCreate()- >onBind()(只一次,不可多次绑定) -> onUnbind->onDestroy()
onBind方法将返回给客户端一个IBind接口实例,IBind允许客户端回调服务的方法,比如得到Service运行的状态或其他操作。
这个时候把调用者(例如Activity)会和Service绑定在一起,Activity退出了,Srevice就会调用onUnbind->onDestroy相应退出。
2.如果打算采用Context.startService()方法启动服务,在服务未被创建时,系统会先调用服务的onCreate()方法,接着调用onStart()方法。
如果调用startService()方法前服务已经被创建,多次调用startService()方法并不会导致多次创建服务,但会导致多次调用onStart()方法。
采用startService()方法启动的服务,只能调用Context.stopService()方法结束服务,服务结束时会调用onDestroy()方法。
3. 如果打算采用Context.bindService()方法启动服务,在服务未被创建时,系统会先调用服务的 onCreate()方法,接着调用onBind()方法。
这个时候调用者和服务绑定在一起,调用者退出了,系统就会先调用服务的onUnbind()方 法,接着调用onDestroy()方法。
如果调用bindService()方法前服务已经被绑定,多次调用bindService()方法并不会导致 多次创建服务及绑定(也就是说onCreate()
和onBind()方法并不会被多次调用)。如果调用者希望与正在绑定的服务解除绑定,可以调用 unbindService()方法,
调用该方法也会导致系统调用服务的onUnbind()-->onDestroy()方法
4. startService
* 开始服务,会使进程变成为服务进程
* 启动服务的activity和服务不再有一毛钱关系
5. bindService
* 绑定服务不会使进程变成服务进程
* 绑定服务,是activity与服务建立连接,如果activity销毁了,服务也会被解绑并销毁,但是如果服务被销毁,activity不会被销毁
服务的混合开启:
* 先start,再bind,销毁时先unbind,再stop
* 先start,再bind,再stop 没有反应 ,需要解绑后才能使用该方法。
应用情景:
在退出Activity的时候在后台播放音乐
一个service可能会处理网络操作,播放音乐,操作文件I/O.所有这些活动都是在后台进行。
如一个想要通过service播放音乐,先通过startService() 方法启动后台播放音乐的service。然后,也许用户想要操作播放器开始或暂停,
一个activity就会通过bindService()建立一个到此service的连接,通过onBind()方法的返回值去操作Service类
就爱阅读www.92to.com网友整理上传,为您提供最全的知识大全,期待您的分享,转载请注明出处。
来源: