Я хочу реализовать функцию локальной галереи. Сначала я использую MediaStore, чтобы получить URI всех локальных изображений, а затем отображаю его на изображении через Picasso / Glide.
Если изображение маленькое, скорость отображения высокая, но когда изображение большое ( 3 МБ-4 МБ или более), скорость отображения становится очень медленной, а пользовательский опыт очень плохим.
![the display speed becomes very slow](https://i.stack.imgur.com/KRY28.png)
Мой код выглядит следующим образом:
// use MediaStore to get the uri of all local pictures
val cursor = APP.INSTANCE.contentResolver.query(
EXTERNAL_CONTENT_URI,
arrayOf(_ID, DISPLAY_NAME, DATE_ADDED),
null,
null,
"$DATE_ADDED DESC"
)
var images = ArrayList<EImage>()
while (cursor?.moveToNext() == true) {
val id = cursor.getLong(cursor.getColumnIndex(_ID))
images.add(
EImage(
id = id,
name = cursor.getString(cursor.getColumnIndex(DISPLAY_NAME)),
uri = ContentUris.withAppendedId(EXTERNAL_CONTENT_URI, id),
added = cursor.getLong(cursor.getColumnIndex(DATE_ADDED))
)
)
}
// Display to imageView via Picasso / Glide
// Picasso
Picasso.get().apply {
isLoggingEnabled = true
}.load(imageUri).apply {
config(Bitmap.Config.RGB_565)
resize(400, 400) //
onlyScaleDown()
centerInside()
into(imageView)
}
// or Glide
Glide.with(imageView.context).load(imageUri).apply {
override(400, 400)
centerInside()
into(imageView)
}
Когда локальное изображение превышает 3 МБ-4 МБ, я обнаружил, что если ширина и высота изменения размера относительно невелики (ниже 350), скорость загрузки высока, но если ширина и высота относительно велики (выше 350), скорость загрузки станет очень медленной (20-30 секунд на изображение), я взял журнал Пикассо следующим образом:
![Picasso's log](https://i.stack.imgur.com/sukas.png)
Могу ли я сделать что-то не так? Как это можно оптимизировать? Большое спасибо!