При использовании URI для загрузки большого локального изображения, это очень медленно. Как я могу оптимизировать это? - PullRequest
0 голосов
/ 31 марта 2020

Я хочу реализовать функцию локальной галереи. Сначала я использую MediaStore, чтобы получить URI всех локальных изображений, а затем отображаю его на изображении через Picasso / Glide.

Если изображение маленькое, скорость отображения высокая, но когда изображение большое ( 3 МБ-4 МБ или более), скорость отображения становится очень медленной, а пользовательский опыт очень плохим.

the display speed becomes very slow

Мой код выглядит следующим образом:

        // 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

Могу ли я сделать что-то не так? Как это можно оптимизировать? Большое спасибо!

...