关于Service的部分笔记

捆绑一个Service,你需要注意以下几个点:
  1.你应该去捕捉DeadObjectException,这个异常通常会在连接断开时抛出。
  2.对象是整个进程计数的引用。
  3.在进程的生命周期中,你应该配对使用绑定和解绑。比如:
  如果你只是在activity可见的情况下与Service进行交互,那么你应该在onStart()函数里进行绑定并在onStop()函数里进行解绑。
  如果你是想在你的activity里收到来自Service的回应[甚至在你的activity 被迫停止后进入后台运行时],那么你应该在onCreate()函数内进行绑定,并在onDestroy()函数内进行解绑。请注意,这意味着你的activity在整个生命周期里都在使用这个Service,如果这个Service是在其他进程内运行,那么你会加重这个进程的负载,并且这会导致系统Kill它以便回收资源。

  注意:不要在activity的onResume()和onPause()函数中对Service进行捆绑以及解绑操作,因为这些回调函数会在生命周期里的任何过渡中出现,但你应该保持进程的过渡时间及其短暂。另外,如果一个应用中有多个activity绑定了同一个service并且在这些activity的两个中存在过渡,那么这个service可能会在activity被stop时被销毁,并在下一个activity resume时重建。

 

 


绑定Service的生命周期的管理


  当一个Service不被任何用户[指的是activity、service、content provider]绑定时,安卓系统会销毁它[除非它是在onStartCommand()函数内被启动].因此,你不必要亲自去管理Service的生命周期。安卓系统会替你去管理它。
但是,如果你选择了实现onStartCommand()的回调函数,那么你就必须主动显性地去给它解绑。不然它会随时启动。在这种情况下,这个Service会活动至它以stopSelf()方式自杀或者是其他组件调用stopService()函数,不管它是否被用户所绑定。
  此外,如果你的Service已经启动,并且接受绑定,那么,当系统调用你的onUnbind()方法时,如果你即将回调onRebind()方法你,那么需要选择性地返回true。onRebind()方法返回一个void,但是用户仍然可以在它回调onServiceConnected()接受IBinder对象。下表展示了Service的生命周期。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值