学习来源:《网易云课堂-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,后面会继续完善这部分代码。