Как подтягивать графические ресурсы с сервера?

Ответить
GRAF_COLLIOSTRO
Сообщения: 115
Зарегистрирован: 08 янв 2015, 14:32

Как подтягивать графические ресурсы с сервера?

Сообщение GRAF_COLLIOSTRO » 24 ноя 2015, 02:04

моё приложение содержит кучу инфы с картинками. что-то типа учебника с тестами. юзверь выбирает тему и просматривает её, потом проходит тест. всё реализовал, вопросов не возникло, но вот ужаснулся при набивании контента. очень много получилось картинок - около 200 МБ после того как пожал всё))) а ведь хочется картинки хорошего качества, вдруг на планшете во весь экран будут их просматривать)

Более того, если юзверь не зайдёт в соответствующий раздел, то никогда не увидит картинки из этого раздела. Закачивать ему ВСЕ нет смысла.

Есть интернет-сервер.

идея такая: залить картинки на сервер и при выборе раздела подкачивать соответствующие картинки из сети.

и тут масса вопросов:

как их дёрнуть и куда? так чтобы второй раз не перекачивать...

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

п.с. Ну, примерчик скачивания по урлу в виде кода не помешал бы)

Аватара пользователя
klblk
Сообщения: 1097
Зарегистрирован: 18 окт 2012, 11:17
Откуда: г. Красноярск

Re: Как подтягивать графические ресурсы с сервера?

Сообщение klblk » 24 ноя 2015, 06:55

Самым попсовым решением будет picasso.
Менее попсовый использовать NetworkImageView из Volley.

GRAF_COLLIOSTRO
Сообщения: 115
Зарегистрирован: 08 янв 2015, 14:32

Re: Как подтягивать графические ресурсы с сервера?

Сообщение GRAF_COLLIOSTRO » 18 дек 2015, 02:05

Эммм... спасибо большое за нужное направление вектора...

Теперь у меня возникли вопросы по кэшу. Нашёл на просторах сети вот такой пример:

Код: Выделить всё

import android.support.v4.util.LruCache;

public class Cache {

    private static Cache instance;
    private LruCache<Object, Object> lru;

    private Cache() {

        lru = new LruCache<Object, Object>(1024);

    }

    public static Cache getInstance() {

        if (instance == null) {

            instance = new Cache();
        }

        return instance;

    }

    public LruCache<Object, Object> getLru() {
        return lru;
    }
}
топорно можно кэшировать изображения. Только не пойму принципа работы. Где хранится этот кэш? при перезагрузке обнуляется? и ещё, как я понял дройд подкачивает его в память - какбы держит на готове... Только вот механизм не понятен. Повторюсь, у меня порядка 300 МБ картинок. Я подкачиваю их на ходу в бэкграунде и закидываю в кэш. Когда нужна картинка, проверяю в кэше и если её нет, то докачиваю. Всё просто. Но!

Сколько оно жрёт оперативы? сколько можно картинок (или в килобайтах оно измеряется) туда запихать? В общем какие у него ограничения? у меня не предусмотрено никакой логики на случай, если памяти нехвата)))

Подскажите, кто сталкивался? надо делать проверки на размерность и свободное место?

GRAF_COLLIOSTRO
Сообщения: 115
Зарегистрирован: 08 янв 2015, 14:32

Re: Как подтягивать графические ресурсы с сервера?

Сообщение GRAF_COLLIOSTRO » 18 дек 2015, 18:35

разобрался с механизмом: Картинки кэшируются в кэш приложения. В настройках у приложения можно видеть общий размер + размер данных (preference) + кэш.

остаётся вопрос, что будет при нехватке памяти и нужно ли проверять свободное место перед кэшированием?

TemMax
Сообщения: 66
Зарегистрирован: 27 окт 2013, 13:46

Re: Как подтягивать графические ресурсы с сервера?

Сообщение TemMax » 27 янв 2016, 05:07

могу порекомендовать ограничить размер кэша на диске (например 50МБ) и чекать его периодически. При переполнении удалять самые старые файлы из папки.

Ответить