我是靠谱客的博主 迷路项链,最近开发中收集的这篇文章主要介绍android绑定Service失败原因,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

.清单文件中没有加service字段,即便service是jar包中的,也需要在清单文件中注册

2.远程服务没有启动

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

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

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

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

3.服务自己销毁

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

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

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

最后

以上就是迷路项链为你收集整理的android绑定Service失败原因的全部内容,希望文章能够帮你解决android绑定Service失败原因所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(35)

评论列表共有 0 条评论

立即
投稿
返回
顶部