Android Studio Firebase Изображения вызывают OOM - PullRequest
0 голосов
/ 07 мая 2018

В настоящее время я занимаюсь разработкой простого приложения для социальных сетей, с которым у меня возникают некоторые проблемы. Мое приложение может отлично работать, если бы не OOM (Недостаточно памяти). Через logcat я понял, почему я получал это сообщение и почему мое приложение не отображало изображения после некоторого тестирования.

Я запустил Android Profiler в своем приложении, чтобы посмотреть, что происходит, и начал переключаться между действиями, создавать посты и загружать некоторые предыдущие посты. Я заметил, что моя память неуклонно растет, и около 500 МБ мое приложение перестало отображать изображения.

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

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

Кто-нибудь знает, как решить эту проблему? требуется всего около минуты активности, чтобы достичь 500 МБ

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

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

Пожалуйста, кто-нибудь может сказать мне, как я должен это исправить. Сжатие изображения? Вывоз мусора? Мне нужен совет, спасибо.

1 Ответ

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

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

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