绑定和未绑定服务不是硬币的两面
服务可以是绑定的或未绑定的(已启动的)或两者兼而有之。这只是您为Service类的回调方法提供的实现问题。请参阅此处的所有四个回调方法
但是为了区别 ,你去吧
1.盯着服务
通过调用startService()方法启动未绑定服务。
通过调用bindService()方法启动绑定服务。
但是在两个调用系统内部调用onStartCommand()方法
2.服务的寿命
一旦启动了unboundService,它将无限运行直到
应用程序组件调用stopService()方法
服务本身调用SelfStop()方法。
只要服务绑定到客户端,BoundService就会运行。 如果没有与服务绑定的活动客户端,系统将销毁该服务
3. onBind()方法
在编写服务时,您必须覆盖onBind()。 如果
然后,未绑定的服务返回null
然后BoundService返回IBinder对象。
虽然未绑定的服务不返回Ibinder对象,但这并不意味着它不能与应用程序组件交互。 有很多方法可以做到这一点,例如BroadCastReceiver或ResultReceiver
与服务双向通信的一种方式
如果您希望与服务进行双向通信,则应将服务与活动绑定。
例如。 在暂停播放音乐,播放选项(Activtiy < - >服务)。
当您只希望服务更新您的活动(服务 – >活动)时,使用未绑定或已启动的服务。
例如:定时服务每秒更新一次活动。
另一个例子
您已经编写了一些处理位置更改的服务。
如果您想在移动10米时更新活动(使用未绑定服务)。
如果要在活动中单击某个按钮时查看当前位置的坐标。 (使用绑定服务)。