Форум программистов, компьютерный форум CyberForum.ru

Программирование Android

Войти
Регистрация
Восстановить пароль
 
ExFau$t
246 / 221 / 42
Регистрация: 08.05.2012
Сообщений: 1,215
#1

Out of memory imageLoader - Программирование Android

27.11.2015, 13:14. Просмотров 302. Ответов 9
Метки нет (Все метки)

Добрый день. Проблема такая, есть таск, загружающий некую информацию и там же imageLoader. Переписал для этого в Thread'ы, но переполнение памяти не исключается.
Вопрос такой: как оптимально использовать память, чтобы не цеплять out of memory, грузить медленно, но уверенно? Желательно через thread, так как нужно высокоприеритетный поток запустить поверх загрузки. Может быть можно как-то выделить некий фиксированный объем памяти для всех потоков, а остальные держать в очереди?

Замечание: конфигурация самого loader'a по умолчанию, кроме размера кэша. Изменения там ни к чему не привели, была мысль уменьшить кол-во пулов.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.11.2015, 13:14     Out of memory imageLoader
Посмотрите здесь:

Imageloader in dcim - Программирование Android
Здравствуйте, маленький вопрос: почему изображения при показе сразу во вью лежат в папке dcim/camera? final DisplayImageOptions...

Out of memory - Программирование Android
то ли я чего то не понимаю, то ли что... весит папка с приложением 4,1мб. собирается под API-level8(те в песочнице - 24мб места). но при...

Out of memory - Matlab
Всем привет. У меня есть две матрицы размеров 306000 на 14000. Мне нужно поэлементно разделить их друг на друга. Когда вызываю ./ то...

Out of memory - Delphi
Не подскажите из-за чего здесь может возникать Out of memory? v2 и r2 - динамические массивы. for i:=0 to Length(v2)-1 do begin ...

Out of memory - Delphi
прога использует AlphaControls. при линковке выпадает оут оф мемори.

Out of memory - Delphi
После добавления очередной формы в проект при попытке его сохранить возникает ошибка Out Of Memory Как ее убрать? Увеличить объем памяти?...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
bastrakov
91 / 91 / 14
Регистрация: 10.10.2015
Сообщений: 307
Записей в блоге: 1
27.11.2015, 15:44     Out of memory imageLoader #2
без шансов. Вы по-любому должны загрузить картинку полностью. а если она например гиг. Вы это узнаете, когда загрузите. Вы это не узнаете по размеру файла.
тема больная, сам полностью правильное решение не нашел. :-(
ExFau$t
246 / 221 / 42
Регистрация: 08.05.2012
Сообщений: 1,215
27.11.2015, 16:09  [ТС]     Out of memory imageLoader #3
bastrakov, ну а если предположить, что картинка не превышает, например, 1Мб. Другие просто-напросто браковать, помещая какую-нибудь дефолтную картинку.

Добавлено через 3 минуты
Тут даже не в размере дело, а в их количестве, logcat начинает мерцать красным лишь после продолжительной стабильной работы, все стандартные методы из readme по лоадеру вставил, но никакой разницы не заметил. Более того, если во время загрузки еще понажимать кнопочки, то приложение и вовсе валится.
Valakin
430 / 96 / 15
Регистрация: 21.02.2015
Сообщений: 729
27.11.2015, 16:23     Out of memory imageLoader #4
bastrakov, нет методов чтобы узнать сколько свободной памяти остается? не слышал про такое
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,648
Завершенные тесты: 1
27.11.2015, 17:09     Out of memory imageLoader #5
ExFau$t, а куда картинки то? Отображать их нужно или просто сохранять?
ExFau$t
246 / 221 / 42
Регистрация: 08.05.2012
Сообщений: 1,215
27.11.2015, 17:25  [ТС]     Out of memory imageLoader #6
Spelcrawler, сразу в imageview и на дисковый кэш, средствами лоадера, но могу рассмотреть и другие варианты, так как загрузить картинки мне надо в любом случае, а отобразить можно и позже.
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,648
Завершенные тесты: 1
27.11.2015, 17:37     Out of memory imageLoader #7
ExFau$t, есть куча библиотек для подобного, мне Glide понравилась, ее и гугл в примерах использует. Она может по url скачать картинку, закэшировать ее и отобразить. И все это в одну строку. При повторном вызове той же строки с тем же url подставляет картинку из кэша. Очень удобно и просто.
ExFau$t
246 / 221 / 42
Регистрация: 08.05.2012
Сообщений: 1,215
27.11.2015, 17:43  [ТС]     Out of memory imageLoader #8
Spelcrawler, а лоадер разве не так делает?

Добавлено через 4 минуты
Я проверял на небольшом количестве картинок, загружал, потом выключал интернет и запускал, картинки отображались как надо. Вот с большим количеством что-то не выходит, боюсь смена библиотеки не поможет.
Spelcrawler
526 / 496 / 111
Регистрация: 12.03.2014
Сообщений: 1,648
Завершенные тесты: 1
27.11.2015, 19:04     Out of memory imageLoader #9
ExFau$t, ну не знаю у меня нормально работает с любым количеством картинок, кэш сам подчищается, если места нет. Плюс картинки режет под размер ImageView, что тоже снижает количество потребляемой памяти.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.11.2015, 17:24     Out of memory imageLoader
Еще ссылки по теме:

Out of memory - C++
Недавно решил освоить графику в с++, и при прорисовке изображения на канве заметил, что оно занимает память. По таймеру каждые 100...

Memory Manager - C++
Добрый день, после прочтения темы http://www.cyberforum.ru/cpp-beginners/thread1399246.html заинтересовался: стоит ли писать такой...

Ошибка: Out of Memory - Delphi
XE-5 AllocMemSize: Integer deprecated; {Unsupported} AllocMemCount: Integer deprecated; {Unsupported} а чем же тогда ловить того,...

Memory test - Ubuntu Linux
Как убрать 2 пункта Memory test из Grub2, чтобы при загрузки их не было, через терминал. Если команды немогу их найти.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
ExFau$t
246 / 221 / 42
Регистрация: 08.05.2012
Сообщений: 1,215
28.11.2015, 17:24  [ТС]     Out of memory imageLoader #10
Spelcrawler, то же делает и imageloader, сжимает их еще. Ну что ж придется попробовать...

Добавлено через 21 минуту
Точно где-то косяк. Загрузил небольшое кол-во картинок, загрузилось, стал щелкать, ну тут процесс, что я в шапке написал, там подгружается дополнительно парочка картинок и текст, так вот начал щелкать и словил эту же ошибку. Вот набросал код для thread.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
 public void Downl() {
        final AlertDialog alert;
        View view = act.getLayoutInflater().inflate(R.layout.dialog, null);
        Drawable dw = new IconicsDrawable(act)
                .icon(FontAwesome.Icon.faw_info)
                .color(Color.BLUE)
                .sizeDp(20);
        ImageView imageView = (ImageView) view.findViewById(R.id.imageViewInf);
        TextView tv = (TextView) view.findViewById(R.id.textDialog);
        tv.setText(R.string.Load);
        imageView.setImageDrawable(dw);
        AlertDialog.Builder builder = new AlertDialog.Builder(act);
        builder.setView(view);
        alert = builder.create();
        alert.show();
        final Handler myHandler = new Handler();
        Thread myThread = new Thread(new Runnable() {
            @Override
            public void run() {
                //загружаем
                Looper.prepare();
                myHandler.post(new Runnable() {
                    @Override
                    public void run() {
                        //показываем (imageloader тоже тут)
                    }
 
                });
                alert.dismiss();
                Looper.loop();
            }
        });
        myThread.setPriority(4);
        myThread.start();
    }
Java
1
2
3
4
5
6
7
ImageLoaderConfiguration config = new ImageLoaderConfiguration.Builder(getApplicationContext())
                .diskCacheExtraOptions(150, 150, null)
                .threadPoolSize(5)
                .threadPriority(Thread.MIN_PRIORITY)
                .build();
        imageLoader = ImageLoader.getInstance();
        imageLoader.init(config);
....
Java
1
2
3
4
5
6
final DisplayImageOptions displayOptions = new DisplayImageOptions.Builder()
                .cacheOnDisk(true)
                .imageScaleType(ImageScaleType.EXACTLY)
                .bitmapConfig(Bitmap.Config.RGB_565)
                .build();
        imageLoader.displayImage(name, imageView,displayOptions);
Добавлено через 7 минут
По умолчанию кэша памяти нет, но такое ощущение, что именно он и переполняется

Добавлено через 4 часа 4 минуты
Spelcrawler, затестил эту либу, первое впечатление не очень, грузит картинку заметно дольше.

Добавлено через 17 часов 43 минуты
Решил забить на картинки, без них логику удалось переделать намного экономней.
Yandex
Объявления
28.11.2015, 17:24     Out of memory imageLoader
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru