【问题标题】:Callback is not Trigger when app is is background/Minimized当应用程序处于后台/最小化时,回调不会触发
【发布时间】:2020-07-29 08:41:02
【问题描述】:

我已经实现了 MVVM 架构,当应用程序处于前台时它运行良好,但是当我最小化应用程序时,存储库将数据发送到视图模型并将视图模型发送到活动,但在我恢复应用程序之前不会调用回调。 方法是存储库:

//新订单的方法及其流程,监听connections集合

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")
         }
    }

这个也被调用,但当应用程序最小化时,我无法接收有关活动的数据。当我将代码移动到 acitivty 时它工作正常,但我需要将代码移动到存储库。

【问题讨论】:

    标签: android kotlin mvvm google-cloud-firestore repository


    【解决方案1】:

    如果没有活动的 Observer,LiveData 不会获得新值,并且当您最小化应用程序时,Observer 会暂停,因为它依赖于生命周期。一旦应用程序回到前台,Observer 就会返回到活动状态,最新数据会发布到它,并且您的活动也会更新。这就是 LiveData 和 Observers 的工作方式。

    我并不完全清楚您要做什么。为什么有必要在任何人都看不到活动的情况下更新活动?听起来您正在尝试在活动/观察者中做一些不应该在 MVVM 中发生的事情。

    【讨论】:

    • 获取实时数据的目的,即使任何活动都是视图,而主页视图将始终在后台堆栈上保持打开状态。相同的代码在其他应用程序中可以正常工作,但在此应用程序中不行。有没有办法做到这一点??
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-20
    • 1970-01-01
    • 2019-01-04
    • 2022-09-27
    • 2017-11-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多