"Se um trabalhador quiser fazer bem o seu trabalho, ele deve primeiro afiar suas ferramentas." - Confúcio, "Os Analectos de Confúcio. Lu Linggong"
Primeira página > Programação > Como evitar vazamentos de recursos ao usar ouvintes de snapshot no FirebaseUI-Android RecyclerView?

Como evitar vazamentos de recursos ao usar ouvintes de snapshot no FirebaseUI-Android RecyclerView?

Publicado em 2024-11-04
Navegar:860

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

Adição e remoção de ouvintes de instantâneo no FirebaseUI-Android RecyclerView

O FirebaseUI-Android fornece uma maneira conveniente de preencher RecyclerViews com dados em tempo real de Armazém de fogo. No entanto, é importante entender como adicionar e remover ouvintes de instantâneo corretamente para evitar vazamentos de recursos.

Adicionando um ouvinte de instantâneo

Ao usar o FirebaseRecyclerAdapter, um ouvinte é adicionado para cada item no RecyclerView. No método populateViewHolder, você pode usar o método getRef(i) para recuperar o DocumentReference para o item atual.

Para ouvir alterações na referência, você pode usar o método addSnapshotListener(EventListener). Este método usa um EventListener como argumento, que será chamado sempre que o instantâneo da referência for alterado.

Removendo um ouvinte de instantâneo

É crucial remover o ouvinte quando não for mais necessário. Não fazer isso resultará em vazamento de memória. Você pode remover o ouvinte usando o método remove() no objeto ListenerRegistration.

Implementação no método populateViewHolder

Aqui está um exemplo de como adicionar e remover um instantâneo ouvinte no método populateViewHolder de um FirebaseRecyclerAdapter:

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

Neste exemplo, a variável listenerRegistration é inicializada como nula. Então, dentro da instrução if, o ouvinte é adicionado se ainda não tiver sido adicionado.

Removendo o ouvinte nos métodos do ciclo de vida da atividade

Para remover o ouvinte quando a atividade não estiver mais visível, você pode substituir o método onStop() em sua atividade e chamar o método remove() em listenerRegistration.

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

Seguindo essas etapas, você pode garantir que os ouvintes de snapshot sejam adicionados e removidos corretamente, evitando vazamentos de recursos e melhorando o desempenho do seu aplicativo.

Tutorial mais recente Mais>

Isenção de responsabilidade: Todos os recursos fornecidos são parcialmente provenientes da Internet. Se houver qualquer violação de seus direitos autorais ou outros direitos e interesses, explique os motivos detalhados e forneça prova de direitos autorais ou direitos e interesses e envie-a para o e-mail: [email protected]. Nós cuidaremos disso para você o mais rápido possível.

Copyright© 2022 湘ICP备2022001581号-3