Проблемы производительности с логическим списком данных в Firebase

Я денормализовал данные, как это предлагается в документах в базе данных firebase. Со списком групп, членом которых является пользователь, я храню в :value. Однако при использовании этого предложения использовать этот список в FirebaseUI, при прокрутке большого списка присоединение прослушивателей вызывает узкое место производительности.

Есть ли способ, которым слушатели не подключаются каждый раз, когда пользователь прокручивает список? Или любой другой способ уменьшить проблемы с производительностью с помощью большого списка логических значений, ссылающихся на другое место в базе данных?


person kirtan403    schedule 04.08.2016    source источник


Ответы (1)


https://firebase.google.com/docs/database/android/retrieve-data#child-events

Вам нужно будет подключить только одного слушателя, child_changed

ChildEventListener childEventListener = new ChildEventListener() {
    @Override
    public void onChildAdded(DataSnapshot dataSnapshot, String previousChildName) {
        Log.d(TAG, "onChildAdded:" + dataSnapshot.getKey());

        // A new comment has been added, add it to the displayed list
        Comment comment = dataSnapshot.getValue(Comment.class);

        // ...
    }

    @Override
    public void onChildChanged(DataSnapshot dataSnapshot, String previousChildName) {
        Log.d(TAG, "onChildChanged:" + dataSnapshot.getKey());

        // A comment has changed, use the key to determine if we are displaying this
        // comment and if so displayed the changed comment.
        Comment newComment = dataSnapshot.getValue(Comment.class);
        String commentKey = dataSnapshot.getKey();

        // ...
    }

    @Override
    public void onChildRemoved(DataSnapshot dataSnapshot) {
        Log.d(TAG, "onChildRemoved:" + dataSnapshot.getKey());

        // A comment has changed, use the key to determine if we are displaying this
        // comment and if so remove it.
        String commentKey = dataSnapshot.getKey();

        // ...
    }

    @Override
    public void onChildMoved(DataSnapshot dataSnapshot, String previousChildName) {
        Log.d(TAG, "onChildMoved:" + dataSnapshot.getKey());

        // A comment has changed position, use the key to determine if we are
        // displaying this comment and if so move it.
        Comment movedComment = dataSnapshot.getValue(Comment.class);
        String commentKey = dataSnapshot.getKey();

        // ...
    }

    @Override
    public void onCancelled(DatabaseError databaseError) {
        Log.w(TAG, "postComments:onCancelled", databaseError.toException());
        Toast.makeText(mContext, "Failed to load comments.",
                Toast.LENGTH_SHORT).show();
    }
};
ref.addChildEventListener(childEventListener);
person Ronnie Royston    schedule 04.08.2016
comment
Спасибо за ваш ответ, но он не поможет ему с логическими значениями в виде списка и получением сведений об элементе списка из ключа путем прикрепления прослушивателей событий значения в onBindViewHolder/populateViewHolder в интерфейсе firebase. - person kirtan403; 05.08.2016