Как вырубить повторного прослушивателя Firebase - PullRequest
0 голосов
/ 12 мая 2019

Существует десять кодов активности java, для активности нужно семь данных.поэтому я добавил firebaseListener (addChildEventListener).Поскольку данные обновляются в каждом действии, каждое действие нужно каждому слушателю.На мой взгляд, он может работать только один код ... (потому что многие люди скажут, что это избыточность) службы, thred ..?что я должен использовать.

    mDatabase.child("Room-List").addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) {
                String key = dataSnapshot.getKey();
               if(key.equals(roomName)) {
                   room = dataSnapshot.getValue(Room.class);
                   gap = room.gap;
                   nextTime = room.nextTime;
                   gameMode = room.gameMode;
                   break;
               }
            }
        }
        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String s) {            }
        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {            }
        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String s) {            }
        @Override
        public void onCancelled(DatabaseError databaseError) {            }
    });


    //Member-List - nickName, online, state, position
    mDatabase.child("Room-List").child(roomName).child("Member-List").addChildEventListener(new ChildEventListener() {
        @Override
        public void onChildAdded(DataSnapshot dataSnapshot, String s) {
            AllnickName = "";
            for (DataSnapshot postSnapshot: dataSnapshot.getChildren()) {
                Person person = dataSnapshot.getValue(Person.class);
                if(person.online) {
                    online++;
                    AllnickName += person.nickName;
                    break;
                }
            }
            TextView_person.setText(AllnickName);
            TextView_roomName.setText(roomName + online);
        }
        @Override
        public void onChildChanged(DataSnapshot dataSnapshot, String s) {            }
        @Override
        public void onChildRemoved(DataSnapshot dataSnapshot) {            }
        @Override
        public void onChildMoved(DataSnapshot dataSnapshot, String s) {            }
        @Override
        public void onCancelled(DatabaseError databaseError) {            }
    });

}

1 Ответ

0 голосов
/ 12 мая 2019

Нет необходимости в Service или Tread для этого.Когда ваше приложение запускается, вы можете раскрутить Singletons в Android .В синглтоне вы можете разместить код ChildEventListener, и к нему может обратиться любой вид деятельности, которому нужны данные ChildEventListener.

Если ваш Activity закроется и перезапустится, синглтон не будет затронут этим.

Какова цель Singleton?
Цель класса Singleton - контролировать создание объектов, ограничивая количество объектов только одним.Синглтон позволяет только одной точке входа создавать новый экземпляр класса.

Поскольку существует только один экземпляр Синглтона, любые поля экземпляра Синглтона будут встречаться только один раз для каждого класса, как статические поля.Singletons часто полезны, когда вам нужно управлять ресурсами, такими как соединения с базой данных или сокеты.

Если пользователь или система Android закрывает ваше приложение, ChildEventListener и Singleton также убивается, пока пользователь не запустит ваше приложениеснова.Если вам нужен ChildEventListener для автоматического перезапуска в этом случае и, так сказать, «всегда быть живым», вы должны использовать [Android Service][2]

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...