android绑定Service失败原因
来源:互联网 发布:已选中提示js代码 编辑:程序博客网 时间:2024/05/17 23:39
1.清单文件中没有加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()操作。
- android绑定Service失败原因
- android绑定Service失败原因
- Android TabActivity 绑定服务失败原因
- springMVC参数绑定失败原因
- android 中Service中的绑定失败策略以及Service自己Destory策略
- Android打包失败原因
- Android:Service非绑定
- android service-绑定
- android service绑定
- Android Service绑定
- Android Service(绑定BindService)
- Android Service或Activity开机自启动及自启动失败原因
- android 开启service和绑定service
- android service 与activity通信--绑定service
- Android Service 非绑定Service的生命周期
- android sdk 更新失败原因
- Android友盟微信分享失败原因
- Android build失败 原因总结:
- OpenLayer3的getArea()及getLenth()方法解析
- nginx+lua扩展
- React遍历数组
- etcd golang watch
- 欢迎使用CSDN-markdown编辑器
- android绑定Service失败原因
- c#枚举电脑上的串口号
- jQuery Mobile 入门
- eclipse自动补全的设置
- android 远程视频监控系统
- redis -- key
- Scala Cookbook读书笔记 Chapter 4.Classes and Properties 第二部分
- Freeswitch1.4连接SQLSERVER数据库
- RemoteAttribute