当应用程序 background/Minimized 时回调不触发
Callback is not Trigger when app is is background/Minimized
我已经实现了 MVVM 架构,当应用程序在前台运行时它运行良好,但是当我最小化应用程序时,存储库将数据发送到视图模型并将视图模型发送到 activity 但回调直到我恢复申请。
方法是存储库:
// new order的方法和流程,监听connects集合
fun connects(driverId: String, connectsSnapshot: (QuerySnapshot?) -> Unit) {
if (connectsRef!=null){
connectsRef?.remove()
connectsRef=null
}
this.connectsSnapshot = connectsSnapshot
connectsRef = FirebaseFirestore.getInstance().collection("connects").whereEqualTo("driver_id", UserDto.getInstance().id).whereEqualTo("status", "new").orderBy("created", Query.Direction.DESCENDING).limit(1)
.addSnapshotListener { snapshots, e ->
if (e != null) {
connectsSnapshot (null)
return@addSnapshotListener
}
System.out.println("==>ListnerHit")
connectsSnapshot (snapshots)
}
}
这个发送数据到视图模型
val mutableLiveDataForConnect = MutableLiveData<QuerySnapshot>()
val mObserverForConnect: Observer<QuerySnapshot> = Observer {
getView().connectListener(it)
}
fun getConnectsData(driverId: String)
{
repository.connects(driverId){
mutableLiveDataForConnect.postValue(it)
System.out.println("==>ViewModel")
}
}
这个也被调用,但当应用程序最小化时,我无法在 activity 上接收数据。当我将代码移动到 acitivty 时它工作正常,但我需要将代码移动到存储库。
如果没有活动的观察者,LiveData 不会获得新值,并且当您最小化应用程序时,观察者会暂停,因为它依赖于生命周期。一旦应用程序返回前台,Observer returns 进入活动状态,最新数据将发布到它并且您的 activity 已更新。这就是 LiveData 和 Observers 应该如何工作。
我不太清楚你要做什么。为什么有必要在 activity 对任何人都不可见的情况下更新它?听起来你正试图在 activity/Observer 中做一些 MVVM 不应该发生的事情。
我已经实现了 MVVM 架构,当应用程序在前台运行时它运行良好,但是当我最小化应用程序时,存储库将数据发送到视图模型并将视图模型发送到 activity 但回调直到我恢复申请。 方法是存储库:
// new order的方法和流程,监听connects集合
fun connects(driverId: String, connectsSnapshot: (QuerySnapshot?) -> Unit) {
if (connectsRef!=null){
connectsRef?.remove()
connectsRef=null
}
this.connectsSnapshot = connectsSnapshot
connectsRef = FirebaseFirestore.getInstance().collection("connects").whereEqualTo("driver_id", UserDto.getInstance().id).whereEqualTo("status", "new").orderBy("created", Query.Direction.DESCENDING).limit(1)
.addSnapshotListener { snapshots, e ->
if (e != null) {
connectsSnapshot (null)
return@addSnapshotListener
}
System.out.println("==>ListnerHit")
connectsSnapshot (snapshots)
}
}
这个发送数据到视图模型
val mutableLiveDataForConnect = MutableLiveData<QuerySnapshot>()
val mObserverForConnect: Observer<QuerySnapshot> = Observer {
getView().connectListener(it)
}
fun getConnectsData(driverId: String)
{
repository.connects(driverId){
mutableLiveDataForConnect.postValue(it)
System.out.println("==>ViewModel")
}
}
这个也被调用,但当应用程序最小化时,我无法在 activity 上接收数据。当我将代码移动到 acitivty 时它工作正常,但我需要将代码移动到存储库。
如果没有活动的观察者,LiveData 不会获得新值,并且当您最小化应用程序时,观察者会暂停,因为它依赖于生命周期。一旦应用程序返回前台,Observer returns 进入活动状态,最新数据将发布到它并且您的 activity 已更新。这就是 LiveData 和 Observers 应该如何工作。
我不太清楚你要做什么。为什么有必要在 activity 对任何人都不可见的情况下更新它?听起来你正试图在 activity/Observer 中做一些 MVVM 不应该发生的事情。