Firebase Slow Image Загрузка - PullRequest
0 голосов
/ 07 мая 2018

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

Когда приложение запускается, посты, которые я загружал в просмотрщик, загружаются только при их прокрутке, но они загружаются относительно быстро. По мере того, как я делаю больше вещей, переключаю действия и т. Д., Мои изображения будут загружаться медленнее и медленнее, пока они не загрузятся, и я застряну с моим изображением-заполнителем.

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

  UserRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if(dataSnapshot.hasChild("username")){
                String Username =  dataSnapshot.child("username").getValue().toString();
                username.setText(Username);
            }
            if (dataSnapshot.hasChild("profileimage")){
                String image = dataSnapshot.child("profileimage").getValue().toString();
                Picasso.get().load(image).placeholder(R.drawable.user_circle2).into(profileImage);
            }
        }

Текст загружается мгновенно, независимо от активности пользователя в приложении, но изображения постоянно загружаются медленнее.

Пожалуйста, кто-нибудь может помочь или предложить альтернативный метод для быстрого отображения изображений, спасибо.

EDIT: Спасибо от Дуга Стивенсона за то, что он сказал мне удалить слушателей, я бы сделал это так?

  eventListener = UserRef.addValueEventListener(new ValueEventListener() {
        @Override
        public void onDataChange(DataSnapshot dataSnapshot) {
            if(dataSnapshot.hasChild("username")){
                String Username =  dataSnapshot.child("username").getValue().toString();
                username.setText(Username);
            }
            if (dataSnapshot.hasChild("profileimage")){
                String image = dataSnapshot.child("profileimage").getValue().toString();
                Picasso.get().load(image).placeholder(R.drawable.user_circle2).into(profileImage);
                endListener();
            }
        }

        @Override
        public void onCancelled(DatabaseError databaseError) {

        }
    });
    }

private void endListener() {
    UserRef.removeEventListener(eventListener);
}

UPDATE: Я добавил удаленных слушателей в приложение. Я отлаживал это на своем телефоне, и, конечно, я получал медленные изображения, как упомянуто ранее, я пробовал это на эмуляторе, хотя скорость загрузки изображений осталась прежней, и я мог переключаться между действиями и даже после того, как я сделал довольно Несколько вещей, изображения все загружались нормально, когда я вернулся к своим сообщениям. Есть идеи почему ???

Я также сейчас получаю следующее сообщение в logcat:

Запуск блокировки GC Alloc 05-07 19: 28: 20.493 15034-16164 / com.sender.hp.sender I / art: Развертка одновременных меток Alloc освободила 3 ​​(72B) объекта AllocSpace, 0 (0B) объектов LOS, 3% свободных, 494 МБ / 510 МБ приостановлено 384us всего 32.059ms 05-07 19: 28: 20.493 15034-16164 / com.sender.hp.sender W / art: Throwing OutOfMemoryError "Не удалось выделить 48771084 байта с 16777216 свободных байтов и 17 МБ до OOM"

Теперь я думаю, что мои изображения поглощают память, вызывая медленное отображение изображений и объясняя, почему текст все еще может появляться легко, а изображения - нет. Я попытаюсь сжать изображения, прежде чем добавить их в базу данных.

1 Ответ

0 голосов
/ 07 мая 2018

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

Если вы не удалите слушателя, когда он больше не нужен, он продолжит получать изменения, которые происходят в том месте, где он слушает. В вашем случае это также означает, что Picasso продолжит загружать изображения. Каждый раз, когда вы добавляете такого слушателя, не удаляя его, все предыдущие слушатели все равно будут получать результаты и загружать изображения. Я могу только предположить, что повторение этого много раз быстро израсходует доступную пропускную способность сети на устройстве с мобильным соединением для передачи данных.

Всегда обязательно удаляйте слушателей, которые вам больше не нужны.

...