如果您的服务不应受到活动生命周期的影响(onStop()
, onStart()
等)然后你可以使用LiveData<T>.observeForever(Observer<T>) https://developer.android.com/reference/android/arch/lifecycle/LiveData#observeforever方法。就像这样,
val observer = Observer<YourDataType> { data ->
//Live data value has changed
}
liveData.observeForever(observer)
要停止观察,您必须致电LiveData.removeObserver(Observer<T>) https://developer.android.com/reference/android/arch/lifecycle/LiveData#removeobserver。就像这样:
liveData.removeObserver(observer)
如果您需要在应用程序处于后台时停止观察,您可以在调用活动中绑定您的服务onStart()
活动方法并解绑您的服务onStop()
方法。就像这样:
override fun onStart() {
super.onStart()
val serviceIntent = Intent(this, myService::class.java)
bindService(serviceIntent, myServiceConnection, Context.BIND_AUTO_CREATE)
}
override fun onStop() {
unbindService(myServiceConnection)
super.onStop()
}
Read on 绑定服务 here https://developer.android.com/guide/components/bound-services
然后,在服务中
- 覆盖
onBind(Intent)
and onRebind(Intent)
方法并开始观察LiveData
(应用程序在前台)
override fun onBind(intent: Intent?): IBinder? {
liveData.observeForever(observer)
return serviceBinder
}
override fun onRebind(intent: Intent?) {
liveData.observeForever(observer)
super.onRebind(intent)
}
- Remove
LiveData
观察者在onUnbind(Intent)
(应用程序在后台运行)
override fun onUnbind(intent: Intent?): Boolean {
liveData.removeObserver(observer)
return true
}