Android-приложение, использующее Firebase медленно на большинстве старых устройств - PullRequest
0 голосов
/ 11 марта 2019

У меня есть 2 приложения, которые уже используются моими клиентами. Эти приложения используют Firebase в качестве БД.

С тех пор, как эти два клиента и их команда начали вводить данные, я достиг точки, когда они становятся очень медленными, особенно на старых устройствах Android.

Я использую эту структуру для одной простой задачи, которая может быть полезна для примера здесь:

в разделе ПОЛЬЗОВАТЕЛИ у меня есть все идентификаторы моих пользователей, а под каждым идентификатором есть:

{
  "checkin" : {
    "Data: 1-11-2018 Horario checkin: 19:02" : {
      "ano" : "2018",
      "checkIn" : true,
      "checkoutCorrect" : true,
      "dia" : "1",
      "hora" : "19",
      "latitude" : "-22.42003992",
      "longitude" : "-45.4668167",
      "mes" : "11",
      "minuto" : "02",
      "nomePaciente" : "NAME 2"
    },
    (...)
  },
  "checkout" : {    
    (...)
  },
  "pacientes" : {
    "NAME" : "Mon Oct 01 20:16:36 GMT-11:00 2018"
  },
  "user type" : "FUNCIONARIO",
  "usuario" : {
    "alreadyAtribuidoAoPaciente" : false,
    "datanascimento" : "03/05/1970",
    "deviceModel" : "motorola XT1097",
    "funcao" : "TECNICO DE ENFERMAGEM",
    "lastLogin" : "7-3-2019 18:52",
    "nome" : "NAME",
    "nroconselho" : "530918",
    "telefone" : "35999428676",
    "tipousuario" : "FUNCIONARIO",
    "userID" : "8H1tHvz3BcR3XeCjz6BWXvC9fFM2",    
    "version" : "2.00"
  }
}

Важно: «Checkin» и «Checkout» содержат много информации.

Теперь я хочу проверить список пользователей и нажимаю кнопку:

ConfiguracaoFirebase.getFirebaseReferenceUsuarios().keepSynced(true); //this is the Firebase reference to USERS explained above
startActivity(intentThatHasAList);

после начала нового действия я загружаю данные, выполнив:

valueEventListener = new ValueEventListener() {
            @Override
            public void onDataChange(@NonNull DataSnapshot dataSnapshot) {
                for (final DataSnapshot snap: dataSnapshot.getChildren()){
                    if (snap.child("user type").getValue().equals("ADMIN")){
                        final Usuario recordUser = new Usuario();
                        recordUser.setName(snap.child("usuario").child("nome").getValue().toString());
                        //...
                        recordUser.setId(snap.getKey());

                        listUsuarios.add(recordUser);
                    }
                    reorderArray();

                }

            }
            @Override
            public void onCancelled(@NonNull DatabaseError databaseError) {
            }
        };

        ConfiguracaoFirebase.getFirebaseReferenceUsuarios()
                .addValueEventListener(valueEventListener);

похоже на простой код, который хочет получить информацию, верно? Однако эта простая задача медленна на устройствах с низким объемом памяти, поэтому я предполагаю, что из-за того, что база данных уже получила большой объем данных, она может получать данные не только из этих ссылок.

Сначала я подумал, что эта строка кода "keepynced" (так как он будет синхронизировать все под ним, и есть много пользователей, каждый из которых содержит много CHECKIN и CHECKOUT), была проблемой, но после того, как я удалил ее, приложение все еще медленно.

Если у кого-то есть хороший опыт работы с Firebase, это может быть полезным примером и распространенной проблемой для большинства людей.

Заранее спасибо.

1 Ответ

0 голосов
/ 11 марта 2019

После того, как я опубликовал этот вопрос, у меня появилось понимание.

Делая это:

 ConfiguracaoFirebase.getFirebaseReferenceUsuarios()
                .addValueEventListener(valueEventListener);

Я получаю ВСЕ информацию внутри него, включая каждого пользователя и каждого CHECKIN и CHECKOUT для него ... поэтому я должен использовать другой путь с меньшим количеством информации. Это было причиной всей медлительности.

Solutuion: переместите все ОСНОВНЫЕ данные на новый путь, где CHECKIN и CHECKOUT (которые содержат огромную информацию о данных) отсутствуют.

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