在 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<DocumentSnapshot>() { @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 生命周期方法中删除监听器
要在以下情况下删除监听器Activity 不再可见,您可以重写 Activity 中的 onStop() 方法,并调用 ListenerRegistration 上的 remove() 方法。
@Override protected void onStop() { super.onStop(); if (listenerRegistration != null) { listenerRegistration.remove(); } }
通过执行以下步骤,您可以确保快照侦听器正确添加和删除,防止资源泄漏并提高应用程序的性能。
以上是在FirebaseUI-Android RecyclerView中使用快照监听器时如何避免资源泄漏?的详细内容。更多信息请关注PHP中文网其他相关文章!