【问题标题】:how to observe a live data inside service class如何观察服务类中的实时数据
【发布时间】:2020-09-15 18:34:28
【问题描述】:

我想将从 API 获得的一些记录插入到我的数据库中, 我正在使用服务类来执行此过程,我试图在服务类中使用实时数据这一概念,但它要求我的服务类成为生命周期所有者。

我一直在思考如何让我的服务类观察实时数据的变化

任何帮助都会很好!

【问题讨论】:

  • 我认为你可以使用 liveData.observeForever(Observer) 并且不需要传递生命周期所有者。但请确保在完成后使用 removeObserver(Observer) 删除观察者。

标签: android android-studio


【解决方案1】:

如果您的服务不应该受到活动生命周期的影响(onStop()onStart() 等),那么您可以使用LiveData<T>.observeForever(Observer<T>) 方法。像这样,

val observer = Observer<YourDataType> { data ->
    //Live data value has changed
}

liveData.observeForever(observer)

要停止观察,您必须致电LiveData.removeObserver(Observer&lt;T&gt;)。像这样:

liveData.removeObserver(observer)

如果您需要在应用程序处于后台时停止观察,您可以在activity的onStart()方法中将您的服务绑定到调用activity中,并在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()
}

阅读绑定服务 here

然后,在服务中

  1. 覆盖onBind(Intent)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)
}
  1. 删除onUnbind(Intent) 中的LiveData 观察者(应用在后台)
override fun onUnbind(intent: Intent?): Boolean {
    liveData.removeObserver(observer)
    return true
}

【讨论】:

    猜你喜欢
    • 2020-06-05
    • 1970-01-01
    • 1970-01-01
    • 2019-10-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-20
    相关资源
    最近更新 更多