Каковы преимущества и преимущества использования ImageDecoder из Android P?

Фон

Android P представляет новый API для загрузки изображений, используя класс ImageDecoder.

Эта проблема

Немного документировано об этом классе, поэтому мне просто любопытно, как его использовать, и стоит ли мне рассмотреть его использование, когда это возможно, например, вместо библиотеки Glide, которую Google рекомендует использовать:

В большинстве случаев мы рекомендуем использовать библиотеку Glide для извлечения, декодирования и отображения растровых изображений в вашем приложении. Glide абстрагирует большую часть сложности при выполнении этих и других задач, связанных с работой с растровыми изображениями и другими изображениями на Android. Для получения информации об использовании и загрузке Glide посетите репозиторий Glide на GitHub.

Что я нашел

Я нашел несколько статей об этом, давая понять, что он может сделать и как его использовать:

Однако, согласно моим тестам, загрузка GIF-анимации хуже с использованием этого API (занимает больше памяти, использует примерно тот же процессор) по сравнению с классом Movie, который сам по себе хуже, чем сторонние библиотеки, такие как android-gif-drawable. Я протестировал довольно длинную GIF-анимацию. На стороннюю библиотеку ушло около 59МБ. Использование класса Movie заняло около 168 МБ, а с использованием нового API ImageDecoder - 200–300 МБ...

Короче говоря, то, что я нашел об этом API, таково:

  1. Предполагается заменить BitmapFactory
  2. Поддерживает загрузку анимированных GIF/WEBP
  3. У него есть несколько слушателей для предварительной / последующей обработки
  4. Он должен быть более эффективным, но я не вижу его, по крайней мере, с точки зрения использования памяти.

Вопросы

  1. Есть ли какие-либо преимущества использования этого API по сравнению с тем, что мы уже имеем в сторонних библиотеках? Значение Glide для статических изображений и "android-gif-drawable" для GIF (и, может быть, что-то для WEBP, которое я не искал)?

  2. Работает ли он лучше за кулисами, и мне наплевать на использование памяти?

  3. Есть ли у него кеш памяти / диска? Если да, то как он управляет своей кэш-памятью сейчас, когда Android не хранит растровые изображения в куче памяти (писал об этом здесь)?

  4. Возможно ли, что этот API будет доступен в библиотеке поддержки? В противном случае я не вижу особой необходимости использовать его вообще... РЕДАКТИРОВАТЬ: кажется, это может быть в библиотеке поддержки. Ссылка здесь.

0 ответов

- Я решил эту проблему, внеся изменения в Gradle.

для последней версии Gradle 5.1.1 она не работает, так что только вы можете сделать это. я думаю, что есть некоторые проблемы с библиотекой Android P

Изменить это:

В файле gradle проекта изменили версию gradle на: classpath 'com.android.tools.build:gradle:3.2.1'

И изменил упаковщик gradle на: gradle-4.10.1

когда вы сделали эти изменения, синхронизируйте gradle и не обновляйте, если он показывает сообщение для изменения.

Другие вопросы по тегам