Можно ли изменить размер кеша, который Пикассо использует для изображений?

Я загружаю изображения с URL-адресов (http://) с помощью Picasso. Иногда, когда я пытаюсь «предварительно загрузить» изображение с помощью метода Пикассо fetch(), изображение не кэшируется. Я предполагаю, что это потому, что это слишком большой размер.

Прочтите ответ на этот вопрос, но setCache(), похоже, не распознан для меня , я даже не нахожу его в документации Пикассо.

Есть ли способ изменить размер кеша, который Пикассо использует для растровых изображений?


person Community    schedule 08.06.2015    source источник


Ответы (2)


Ты можешь сделать:

int maxSize = MAX_CACHE_SIZE;
Picasso picasso = new Picasso.Builder(context)
                              .memoryCache(new LruCache(maxSize))
                              .build();

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

Похоже, в другом ответе используется неправильная функция. Должно быть memoryCache, а не setCache.

person Tushar    schedule 08.06.2015
comment
есть 2 типа кэш-памяти и дисковая. - person dasar; 08.06.2015
comment
hay @Tushar я использую picasso для загрузки изображений с диска, как показано ниже picasso.with(context).load(file).into(imageview); ...... как я могу установить кэш памяти таким образом? спасибо заранее - person Error; 14.11.2015
comment
С этими строками в моей прокрутке всегда появляются ошибки цвета Purple - person ; 14.03.2016
comment
Привет, какой максимальный размер? - person Siddarth G; 23.01.2018

В этом примере используется OkHttp в качестве http-клиента для Picasso и устанавливается максимальный размер дискового кэша, а также кэш памяти.

 // Size in bytes (10 MB)
 private static final long PICASSO_DISK_CACHE_SIZE = 1024 * 1024 * 10;

 // Use OkHttp as downloader
 Downloader downloader = new OkHttpDownloader(getApplicationContext(),
                        PICASSO_DISK_CACHE_SIZE);

  // Create memory cache
  Cache memoryCache = new LruCache(maxSize);

  mPicasso = new Picasso.Builder(getApplicationContext())
                        .downloader(downloader).memoryCache(memoryCache).build();
person dasar    schedule 08.06.2015
comment
hay @dasar я использую picasso для загрузки изображений с диска, как показано ниже picasso.with(context).load(file).into(imageview); ...... как я могу установить кэш памяти таким образом? спасибо заранее - person Error; 14.11.2015
comment
@Error, вам нужно создать экземпляр Picasso с помощью компоновщика и вызвать Picasso.setSingletonInstance(picasso), чтобы вы могли продолжать использовать его, как сейчас. - person dasar; 15.11.2015
comment
да, это работает, но я должен создать синглтон в классе, который расширяет приложение. - person Error; 17.11.2015
comment
Сам @Error Picasso имеет статический метод setSingletonInstance() именно для этой цели. Вам просто нужно создать экземпляр и установить его как синглтон, используя этот метод, piccaso сделает все остальное. Вы будете использовать Picasso как обычно, вызвав Picasso.with(ctx), но под капотом будет использоваться экземпляр singleton. И да, вероятно, класс приложения - это хорошее место для создания экземпляра Picasso, или вы можете сделать это в другом месте, но просто сделайте это до того, как оно вам понадобится. - person dasar; 17.11.2015
comment
следуйте описанному выше пути + установите объект mPicasso в одноэлементный метод Picasso. Таким образом, тот же объект будет передан в Picasso.get(). - person Charan; 30.01.2019
comment
Занимает ли установленное пространство памяти во время создания или только тогда, когда первое изображение хранится там (лениво)? - person K.Os; 25.07.2019