С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
ExFau$t
372 / 358 / 75
Регистрация: 08.05.2012
Сообщений: 1,805
#1

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

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

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

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

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

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

Create an in memory bitmap and draw directly to the memory - C++ WinAPI
Здравствуйте! У меня есть пара вопросов. Знаю, что рисовать в HDC можно только с одного потока. Но узнал такую вещь, что можно создать...

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

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

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

9
bastrakov
91 / 91 / 14
Регистрация: 10.10.2015
Сообщений: 307
Записей в блоге: 1
27.11.2015, 15:44 #2
без шансов. Вы по-любому должны загрузить картинку полностью. а если она например гиг. Вы это узнаете, когда загрузите. Вы это не узнаете по размеру файла.
тема больная, сам полностью правильное решение не нашел. :-(
0
ExFau$t
372 / 358 / 75
Регистрация: 08.05.2012
Сообщений: 1,805
27.11.2015, 16:09  [ТС] #3
bastrakov, ну а если предположить, что картинка не превышает, например, 1Мб. Другие просто-напросто браковать, помещая какую-нибудь дефолтную картинку.

Добавлено через 3 минуты
Тут даже не в размере дело, а в их количестве, logcat начинает мерцать красным лишь после продолжительной стабильной работы, все стандартные методы из readme по лоадеру вставил, но никакой разницы не заметил. Более того, если во время загрузки еще понажимать кнопочки, то приложение и вовсе валится.
0
Valakin
431 / 97 / 15
Регистрация: 21.02.2015
Сообщений: 731
27.11.2015, 16:23 #4
bastrakov, нет методов чтобы узнать сколько свободной памяти остается? не слышал про такое
0
Spelcrawler
527 / 497 / 111
Регистрация: 12.03.2014
Сообщений: 1,663
Завершенные тесты: 1
27.11.2015, 17:09 #5
ExFau$t, а куда картинки то? Отображать их нужно или просто сохранять?
0
ExFau$t
372 / 358 / 75
Регистрация: 08.05.2012
Сообщений: 1,805
27.11.2015, 17:25  [ТС] #6
Spelcrawler, сразу в imageview и на дисковый кэш, средствами лоадера, но могу рассмотреть и другие варианты, так как загрузить картинки мне надо в любом случае, а отобразить можно и позже.
0
Spelcrawler
527 / 497 / 111
Регистрация: 12.03.2014
Сообщений: 1,663
Завершенные тесты: 1
27.11.2015, 17:37 #7
ExFau$t, есть куча библиотек для подобного, мне Glide понравилась, ее и гугл в примерах использует. Она может по url скачать картинку, закэшировать ее и отобразить. И все это в одну строку. При повторном вызове той же строки с тем же url подставляет картинку из кэша. Очень удобно и просто.
0
ExFau$t
372 / 358 / 75
Регистрация: 08.05.2012
Сообщений: 1,805
27.11.2015, 17:43  [ТС] #8
Spelcrawler, а лоадер разве не так делает?

Добавлено через 4 минуты
Я проверял на небольшом количестве картинок, загружал, потом выключал интернет и запускал, картинки отображались как надо. Вот с большим количеством что-то не выходит, боюсь смена библиотеки не поможет.
0
Spelcrawler
527 / 497 / 111
Регистрация: 12.03.2014
Сообщений: 1,663
Завершенные тесты: 1
27.11.2015, 19:04 #9
ExFau$t, ну не знаю у меня нормально работает с любым количеством картинок, кэш сам подчищается, если места нет. Плюс картинки режет под размер ImageView, что тоже снижает количество потребляемой памяти.
0
ExFau$t
372 / 358 / 75
Регистрация: 08.05.2012
Сообщений: 1,805
28.11.2015, 17:24  [ТС] #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 минуты
Решил забить на картинки, без них логику удалось переделать намного экономней.
0
28.11.2015, 17:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.11.2015, 17:24
Привет! Вот еще темы с ответами:

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

Out of memory - Assembler
Приветствую уважаемые! Изучаю ассемблер по учебнику "Ассемблер - это просто". Дошел до создания оболочки, в книге приведен листинг...

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

Out of memory в C++ builder - C++ Builder
Здравствуйте! Расскажите, пожалуйста, что надо делать в программе, чтобы избежать outofmemory Error? Работаю с TStringLIst->Add, с...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

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