Firebase 数据库侦听器是否会自动分离,是什么原因造成的?

Do Firebase Database listener's automatically detach and what causes it?

使用 firebase,我向节点 "mReference" 添加了一个监听器,它可能随时更改值。当我的应用程序打开或最近关闭时,侦听器会工作。如果应用程序已关闭很长时间(~天),则不会触发侦听器的 onDataChange。 Firebase 数据库侦听器会在一段时间后或由于特定事件自动分离吗?

ValueEventListener listener = new ValueEventListener() {
    @Override
    public void onDataChange(DataSnapshot dataSnapshot) {

        Map map = dataSnapshot.getValue();
        // ...
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {

        // ...
    }
};
mReference.addValueEventListener(listener);

您不能依赖 Android 应用程序内的任何 Firebase 侦听器在应用程序关闭时持续 运行。将侦听器添加到服务也不起作用,因为 Android 的最新版本将限制服务何时可以 运行 (请参阅有关打瞌睡模式的文档,以及在 Oreo 中添加的更严格的限制)。

如果您需要您的应用程序在数据库中发生某些 activity 时采取行动,解决该问题的一种方法是使用一个或多个 Firebase 实时数据库触发器来识别数据库中的操作;在触发器中,您可以使用 Firebase 云消息传递 (FCM) 向您的设备发送消息。

数据库在 Firebase 服务器上触发 运行,不需要您的应用处于活动状态。 FCM 可以配置为 "wake up" 您的应用,以便它可以采取适当的操作; FCM 与打瞌睡模式和最近对应用程序后台的其他限制配合得很好activity。