"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > FirebaseUI-Android RecyclerView에서 스냅샷 리스너를 사용할 때 리소스 누출을 방지하는 방법은 무엇입니까?

FirebaseUI-Android RecyclerView에서 스냅샷 리스너를 사용할 때 리소스 누출을 방지하는 방법은 무엇입니까?

2024-11-04에 게시됨
검색:864

 How to Avoid Resource Leaks When Using Snapshot Listeners in FirebaseUI-Android RecyclerView?

FirebaseUI-Android RecyclerView에서 스냅샷 리스너 추가 및 제거

FirebaseUI-Android는 다음의 실시간 데이터로 RecyclerView를 채우는 편리한 방법을 제공합니다. 소방서. 그러나 리소스 누출을 방지하려면 스냅샷 리스너를 올바르게 추가하고 제거하는 방법을 이해하는 것이 중요합니다.

스냅샷 리스너 추가

FirebaseRecyclerAdapter를 사용하면 다음에 대한 리스너가 추가됩니다. RecyclerView의 각 항목. populateViewHolder 메소드에서 getRef(i) 메소드를 사용하여 현재 항목에 대한 DocumentReference를 검색할 수 있습니다.

참조에 대한 변경 사항을 수신하려면 addSnapshotListener(EventListener) 메소드를 사용할 수 있습니다. 이 메소드는 참조의 스냅샷이 변경될 때마다 호출되는 EventListener를 인수로 사용합니다.

스냅샷 리스너 제거

리스너를 제거하는 것이 중요합니다. 더 이상 필요하지 않을 때. 그렇게 하지 않으면 메모리 누수가 발생합니다. ListenerRegistration 객체의 제거() 메소드를 사용하여 리스너를 제거할 수 있습니다.

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");
                }
            }
        });
    }
}

이 예에서는 listeningRegistration 변수가 null로 초기화됩니다. 그런 다음 if 문 내에서 리스너가 아직 추가되지 않은 경우 추가됩니다.

활동 수명 주기 방법에서 리스너 제거

리스너를 제거하려면 활동이 더 이상 표시되지 않으면 활동에서 onStop() 메서드를 재정의하고 ListenerRegistration.

@Override
protected void onStop() {
    super.onStop();
    if (listenerRegistration != null) {
        listenerRegistration.remove();
    }
}

이러한 단계를 수행하면 스냅샷 리스너가 올바르게 추가 및 제거되어 리소스 누출을 방지하고 애플리케이션 성능을 향상시킬 수 있습니다.

최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3