android 中Service中的绑定失败策略以及Service自己Destory策略

 (一)Service绑定失败策略

          在Android中,当我们跨进程启动或者绑定一个Service,当时不能保证第一次就能成功,比如,远程的Service还没起启动成功,需要过一段时间才行,当没有绑定成功后,我们通过aidl来调用RemoteServcie就会出现Null错误,即ServiceConnection中的onServiceConnected()还未被回调,没有给本地远程服务代理赋值。

          为了解决绑定或者启动没有成功的问题,我们可以使用循环绑定策略,即发现并未绑定成功,我们再次绑定,但是又不能无限循环,因为,假如远程就是没有了,无限循环绑定就会出现错误。所以必须还有定个循环绑定次数。

          当我们使用远程Service的本地代理时候,先判断它是否为null,若为null,则执行循环绑定操作,并且制定一个循环绑定次数限制,比如是3,每次循环后次数限制就做减一操作,当减为0时候,表示远程服务出现错误,则不再执行循环绑定操作。

          在执行循环绑定操作时候,我们可以使用延迟绑定操作,就是延迟几毫秒再绑定,这样,就确保Remote Service启动时间是足够的。可以通过编写一个Handler,使用handler.sendMessageDelayde(Messagee msg, long delayMillis)操作来延迟。


(二)Service自己销毁

          当我们实现自己的aidl的Service时候,我们需要自己销毁Servcie,因为外界可能只是startService(),并不会调用stopServcie()操作,另一方面,当我们Service做完工作后,将自己销毁,也节省cpu,因此自己销毁Servcie就显得非常重要。

          Service中,自己销毁操作就是本身调用stopSelf()函数,但是何时调用该函数才是重点,我们可以通过任务队列实现。

          当Service中,我们为所有Tasks创建一个队列,当client端调用Service时候,每推进一个Task,就将该Task插入到该队列中,当执行完一个Task后,就从队列中删除,然后判断该队列是否为空,若为空则执行stopService()操作。


以上就是对Service启动绑定和自己销毁一些策略应用,大家可以在android源码中找到相应的使用情景。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值