Android开发—Service学习二(onBind)

学习来源:《网易云课堂-Android基础教程》

上一篇Service的实现只是service的一部分,如果需要service与访问者进行数据交互,就需要service的另外一个生命周期OnBind与onUnBind。

例如,上一篇已经在service中实时获取GPS的信息并发给服务器了,利用OnBind方法,将service的gps信息发送给主界面地图,就不用在activity中另写一个获取gps的方法了。


为了学习OnBind(),同时为了这个功能的实现,断断续续弄了一下午加一晚上,其中碰到了一些问题,想到了一些新的解决问题的思路,同时也学到了一些知识。如下:

1, 两个class共享数据

不想代码都堆在一个activity中,一些类单独写在其他文件中,如何与另外一个类共享数据,比如我这边封装了GPSData数据类,gps信息实时会更新,我想两个类可以同时操作这个gps对象。

我这边想到的就是用单例模式了,一个单例的GPSData,在我现在公司做的项目中,数据类的单例模式也用的很多。


2, Activity传递数据,传递自定义类,并返回

以前只会用StartActivity,现在需要获得返回值,就要用StartActivityForResult()

另外,传递自定义的类,该类需要实现Serializable接口

(代码就不贴了,都是基础)

很多东西都要自己动手去实现过了,才会发现其实还是没有想象那么简单,但是有些又去实现过了才发现也没那么复杂。


3, android.app.ServiceConnectionLeaked: that was originally bound here

在第一次运行的时候,跳出这个错误,翻了翻google,说需要在onDestroy方法中调用unBindService(),果然,这样就没问题了。

由于在Activity中进行绑定,程序意外结束时需要将服务解绑,避免类似内存泄露这样的错误。


最后,关于bind服务的方法,今天是在我的设置页面中(有GPS设置的开关)实现的,而我的GPS服务是要为主界面的地图服务的,所以,SettingActivity中就解绑了服务显然不太合理。最后还是需要在MainActivity中做服务的绑定,而SettingActivity可以返回GPS开关的标识,这就够了。


ok,后面会继续完善这部分代码。




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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值