android service生命周期

一.  通过startService()启动Service.

        1. Service会经历onCreate()-------->onStart()

        2. stopService时会直接调用onDestroy()

        3. 如果调用者直接退出而没有调用stopService的话,Service会一直在后台运行,下次调用者再启动的时候仍然可以通过stopService来stop该Service,如果打算用context.startService()方法来启动Service,在服务未创建的时候,系统会先调用服务的onCreate()方法,然后调用onStart()方法,如果调用startService()之前Service已经被创建了,多次调用startService()方法不会导致多次创建该Service,但是会导致多次调用onStart()方法,采用startService()启动的服务,只能调用context.stop.stopService()方法来结束该Service, Service结束的时候会调用onDestroy()方法.

       4.  它可以启动后允许一直运行知道有人停止它或者它自己停止,这种模式下可以调用Context.startService()启动Service以及调用Context.stopService()停止Service服务,Service也可以调用Service.stopSelf()或者Service.stopSelfResult()停止自己。仅需要调用一次stopService()停止该Service,而不管调用了多少次startService().


二.  通过bindService来启动Service.

       1. Service只会运行onCreate()方法,这个时候调用者和Service绑定在一起,调用者退出了,Service就会调用onUnbind() -------------->onDestroyed(),所谓绑定就是一起共存亡了。如果打算用context.bindService()方法启动Service,在Service没有创建时,系统会先调用onCreate()方法,然后调用onBind()方法。这个时候调用者和Service就绑定在一起了,调用者退出了,系统就会调用onUnbind()方法,然后调用onDestroy()方法。如果调用bindService()方法前服务已经被绑定,多次调用bindService()方法并不会导致多次创建和绑定(也就是说onCreate()和onBind()方法并不会多次被调用).如果调用者希望与正在绑定的Service解除绑定,可以调用unbindService()方法,该方法会导致系统调用Service中的onUnbind()---------->onDestroy()方法 。

        2. 客户端建立与Service对象的一个连接和使用该连接调入服务。连接通过调用Context.bindService()建立,通过context.unbindService()关闭。多个客户端可以绑定到同一个Service中,如果Service没有启动,bindService()可以选择启动它.


三.  这两种模式并不是完全分离的。你可以绑定到一个用startService()启动的服务。虽然分离了由startService()启动的服务和由bindService()启动的服务,但是请记住:任何服务,无论它如何启动的,都可能允许 客户端绑定它,因此任何服务都可能接收onBind()和onUnbind()调用.


四.  多个客户端可以同时连接到service端,然而,系统会在你的客户端第一次绑定的时候调用service的onBind()方法去检索IBinder,系统之后会传递同样的IBinder给任何增加的绑定的客户端,而不会再次调用 onBind()方法。当最后一个客户端从service解绑时,系统销毁service(除非service是被startService()开启的).

       

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值