在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@Oride protected void populateViewHolder(最終ConvViewHolder convViewHolder, 最終Conv conv, int i) { 最終 String list_user_id = getRef(i).getKey(); 最終 DocumentReference docRef = db.collection("cities").document(list_user_id); 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"); } } }); } }
在Activity 生命週期方法中刪除偵聽器
要在以下情況下刪除偵聽器:該活動不再可見,您可以覆蓋活動中的onStop() 方法並呼叫監聽器註冊上的remove() 方法。@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 受保護無效 onStop() { super.onStop(); if (listenerRegistration!= null) { 監聽器註冊.remove(); } }透過執行下列步驟,您可以確保正確新增和刪除快照監聽器,防止資源洩漏並提高應用程式的效能。() { @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"); } } }); } }
免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。
Copyright© 2022 湘ICP备2022001581号-3