在 FirebaseUI-Android RecyclerView 中添加和删除快照侦听器
FirebaseUI-Android 提供了一种便捷的方法来使用来自以下位置的实时数据填充 RecyclerView:消防店。但是,了解如何正确添加和删除快照侦听器以避免资源泄漏非常重要。
添加快照侦听器
使用 FirebaseRecyclerAdapter 时,会添加一个侦听器RecyclerView 中的每个项目。在 populateViewHolder 方法中,您可以使用 getRef(i) 方法来检索当前项目的 DocumentReference。
要监听引用的更改,您可以使用 addSnapshotListener(EventListener) 方法。此方法采用 EventListener 作为参数,只要引用的快照发生更改,就会调用该方法。
删除快照侦听器
删除侦听器至关重要当不再需要它时。如果不这样做将导致内存泄漏。您可以使用ListenerRegistration对象上的remove()方法删除监听器。
populateViewHolder方法中的实现
下面是如何添加和删除快照的示例FirebaseRecyclerAdapter 的 populateViewHolder 方法中的侦听器:
@Override protected void populateViewHolder(final ConvViewHolder convViewHolder, final Conv conv, int i) { final String list_user_id = getRef(i).getKey(); final DocumentReference docRef = db.collection("cities").document(list_user_id); ListenerRegistration listenerRegistration = null; if (listenerRegistration == null) { listenerRegistration = docRef.addSnapshotListener(new EventListener() { @Override public void onEvent(@Nullable DocumentSnapshot snapshot, @Nullable FirebaseFirestoreException e) { if (e != null) { Log.w(TAG, "Listen failed.", e); return; } if (snapshot != null && snapshot.exists()) { Log.d(TAG, "Current data: " snapshot.getData()); } else { Log.d(TAG, "Current data: null"); } } }); } }
在此示例中,listenerRegistration 变量初始化为 null。然后,在 if 语句内,如果尚未添加侦听器,则将其添加。
在 Activity 生命周期方法中删除侦听器
要在以下情况下删除侦听器:该活动不再可见,您可以覆盖活动中的 onStop() 方法并调用监听器注册上的remove() 方法。
@Override protected void onStop() { super.onStop(); if (listenerRegistration != null) { listenerRegistration.remove(); } }
通过执行以下步骤,您可以确保正确添加和删除快照监听器,防止资源泄漏并提高应用程序的性能。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3