Каковы преимущества и преимущества использования ImageDecoder из Android P?
Фон
Android P представляет новый API для загрузки изображений, используя класс ImageDecoder.
Эта проблема
Немного документировано об этом классе, поэтому мне просто любопытно, как его использовать, и стоит ли мне рассмотреть его использование, когда это возможно, например, вместо библиотеки Glide, которую Google рекомендует использовать:
В большинстве случаев мы рекомендуем использовать библиотеку Glide для извлечения, декодирования и отображения растровых изображений в вашем приложении. Glide абстрагирует большую часть сложности при выполнении этих и других задач, связанных с работой с растровыми изображениями и другими изображениями на Android. Для получения информации об использовании и загрузке Glide посетите репозиторий Glide на GitHub.
Что я нашел
Я нашел несколько статей об этом, давая понять, что он может сделать и как его использовать:
- https://blog.stylingandroid.com/imagedecoder-error-handling-cropping-scaling/
- https://vivekc.xyz/whats-new-in-android-p-the-breaking-changes-and-amazing-features-8f4e864802a9 - говорит, что в отличие от BitmapFactory, он также может обрабатывать "анимированные GIF-изображения и изображения WebP", создавая AnimatedImageDrawable
- https://www.androidpolice.com/2018/03/07/google-announces-android-p-notch-support-multi-camera-api-indoor-positioning/ - говорит, что лучше декодировать. Не уверен, каким образом это лучше...
- https://youtu.be/LBBqTd6uOd4?t=116 - говорит, что вы можете выполнять некоторые операции, похожие на Glide: кадрировать, иметь слушателей и т. д.
- https://developer.android.com/preview/features?authuser=1
- https://blog.stylingandroid.com/imagedecoder-error-handling-cropping-scaling/
Однако, согласно моим тестам, загрузка GIF-анимации хуже с использованием этого API (занимает больше памяти, использует примерно тот же процессор) по сравнению с классом Movie, который сам по себе хуже, чем сторонние библиотеки, такие как android-gif-drawable. Я протестировал довольно длинную GIF-анимацию. На стороннюю библиотеку ушло около 59МБ. Использование класса Movie заняло около 168 МБ, а с использованием нового API ImageDecoder - 200–300 МБ...
Короче говоря, то, что я нашел об этом API, таково:
- Предполагается заменить BitmapFactory
- Поддерживает загрузку анимированных GIF/WEBP
- У него есть несколько слушателей для предварительной / последующей обработки
- Он должен быть более эффективным, но я не вижу его, по крайней мере, с точки зрения использования памяти.
Вопросы
Есть ли какие-либо преимущества использования этого API по сравнению с тем, что мы уже имеем в сторонних библиотеках? Значение Glide для статических изображений и "android-gif-drawable" для GIF (и, может быть, что-то для WEBP, которое я не искал)?
Работает ли он лучше за кулисами, и мне наплевать на использование памяти?
Есть ли у него кеш памяти / диска? Если да, то как он управляет своей кэш-памятью сейчас, когда Android не хранит растровые изображения в куче памяти (писал об этом здесь)?
Возможно ли, что этот 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 и не обновляйте, если он показывает сообщение для изменения.