> Java > java지도 시간 > 본문

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

Barbara Streisand
풀어 주다: 2024-10-26 21:16:02
원래의
330명이 탐색했습니다.

 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<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 문 내에서 리스너가 아직 추가되지 않은 경우 추가됩니다.

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

다음 경우에 리스너를 제거하려면 활동이 더 이상 표시되지 않으면 활동에서 onStop() 메서드를 재정의하고 ListenerRegistration에서 제거() 메서드를 호출할 수 있습니다.

@Override
protected void onStop() {
    super.onStop();
    if (listenerRegistration != null) {
        listenerRegistration.remove();
    }
}
로그인 후 복사

이 단계를 수행하면 스냅샷 리스너가 표시되는지 확인할 수 있습니다. 적절하게 추가 및 제거하여 리소스 누출을 방지하고 애플리케이션 성능을 향상시킵니다.

위 내용은 FirebaseUI-Android RecyclerView에서 스냅샷 리스너를 사용할 때 리소스 누출을 방지하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!