Android 如果onPause()或onStop()使用来自firebase数据库的嵌套回调中断函数,会发生什么情况

Android 如果onPause()或onStop()使用来自firebase数据库的嵌套回调中断函数,会发生什么情况,android,firebase,firebase-realtime-database,activity-lifecycle,Android,Firebase,Firebase Realtime Database,Activity Lifecycle,我有一个函数,它具有来自Firebase数据库的嵌套回调(onDataChange()等)。如果应用程序在执行所有回调之前停止或暂停(例如,用户在从FirebaseDatabase接收dataSnapshot之前收到电话),会发生什么情况?其余的回调是在后台执行还是根本不执行 这是我的密码: mUserOrder.addListenerForSingleValueEvent(new ValueEventListener() {

我有一个函数,它具有来自Firebase数据库的嵌套回调(onDataChange()等)。如果应用程序在执行所有回调之前停止或暂停(例如,用户在从FirebaseDatabase接收dataSnapshot之前收到电话),会发生什么情况?其余的回调是在后台执行还是根本不执行

这是我的密码:

        mUserOrder.addListenerForSingleValueEvent(new ValueEventListener() {
                                    @Override
                                    public void onDataChange(DataSnapshot dataSnapshot) {
                                    mUserOrder.child(Integer.toString(lastOrders.get(n - 5))).addListenerForSingleValueEvent(new ValueEventListener() {     //getting the orderId of the order to be removed
                                                @Override
                                                public void onDataChange(DataSnapshot dataSnapshot) {
                                                    removeOrderID = (String) dataSnapshot.getValue();
                                                    mDatabaseOrder.child(removeOrderID).addListenerForSingleValueEvent(new ValueEventListener() {
                                                        @Override
                                                        public void onDataChange(DataSnapshot dataSnapshot) {
                                                        removeOrder = dataSnapshot.getValue(RequestOrder.class);
                                                        mRecycleOrdersDB.child(removeOrderID).setValue(removeOrder);
                                                        mDatabaseOrder.child(removeOrderID).removeValue();
                                                        mUserOrder.child(Integer.toString(lastOrders.get(n - 5))).removeValue();


                                                        progress.hide();
                                                        startMainActivity();
                                                        }

侦听器将全部执行,直到:

  • 删除侦听器
  • 应用程序进程死亡(这可能发生在用户不再可见的任何时候)
  • 在较新版本的Android上,该应用程序切断了对该应用程序的网络访问,因为它在变得不可见后在后台呆了太长时间。恢复可见性后,当Firebase SDK恢复连接时,侦听器将再次开始触发

  • 通常情况下,当活动变为可见时,在onStart()期间添加侦听器,当活动变为不可见时,在onStop()期间删除侦听器。

    Ok。但是如果应用程序暂停或停止,其余的回调会运行吗?其余的回调是否能够在执行时进行UI更改@Dough回调将按照我在回答中概述的那样执行。活动暂停或停止后可以进行UI更新,因为视图层次结构仍处于附加状态。活动被销毁后更新无效,因为视图基本上已消失,并且永远不会回来。在onDestroy之后,永远不要保留对视图的引用,否则可能会泄露它们。在此之前,您确实需要删除侦听器。