如何停止RecyclerView适配器内部的快照侦听器?

时间:2019-10-06 04:32:42

标签: java android firebase google-cloud-firestore

我只是对Firestore快照侦听器有某些疑问。我是使用它的新手,并且我读过您每次移动到另一个活动时都必须停止快照侦听器。我尝试过:

db.collection("Mydata").document(userID).addSnapshotListener(itemView.getContext(), new EventListener<DocumentSnapshot>() {
                    @Override
                    public void onEvent(@Nullable DocumentSnapshot documentSnapshot, @Nullable FirebaseFirestoreException e) {

                    }
                })

但是由于itemView.getContext()而导致错误。

我的问题是:

  • 如果我不包括Activity并像这样保留快照侦听器,可以吗?
  • 如果没有,有什么办法解决这个问题?

1 个答案:

答案 0 :(得分:1)

  

如果我不包括“活动”并像这样保留快照侦听器,可以吗?

不,不是!当您为listening to realtime updates调用addSnapshotListener时,这意味着您将附加一个侦听器,该侦听器将针对数据库中发生的每个更改而被调用。因此,当您关闭应用程序时也会发生这种情况,这就是为什么在活动被销毁之前必须强制detach the listeners的原因。

  

如果没有,有什么办法解决这个问题?

是的,有。请从以下帖子中查看我的答案:

  

如果您不需要在应用中实时获取数据,则可以直接在引用上直接使用get()调用,该引用仅读取一次文档。由于它只能读取一次,因此没有要删除的侦听器。