Как и обещал, поделюсь интересными инсайтами из докладов с прошедшего Mobius.
В этот раз конференция получилась для меня не совсем привычной для офлайн-формата: было, к сожалению, мало стендов. Тут, очевидно, сказывается общая экономическая ситуация, но зато я посетил большое количество докладов, так что и в этом есть свои плюсы.
Итак, что же интересного удалось вынести:
👉 SharedFlow использует под капотом кольцевой буфер, но по умолчанию создаётся без него, и это работает почти в 10 раз медленнее, чем с буфером. При этом в операторе shareIn буфер уже задаётся, так что рассмотрите возможность указания буфера по умолчанию, если создаёте SharedFlow через основной конструктор.
👉 Чтобы эффективно работать с большими изображениями, нужно читать их по частям с помощью BitmapRegionDecoder и использовать culling, чтобы убирать тайлы, которые не видны на экране. Также поможет субсэмплинг, позволяющий снижать разрешение тайла при низком зуме, и правильный выбор фазы отрисовки в Compose. Подробнее почитать об этом можно
здесь.
👉 Работать с AGSL-шейдерами довольно просто на статических картинках, но как только в эту цепочку добавляется видео, всё становится значительно сложнее: придётся синхронизировать анимацию шейдеров с паузами в видео и решать другие проблемы. Подробнее посмотреть на реализацию таких шейдеров для Android и iOS можно
здесь.
👉 Можно собрать собственного локального AI-ассистента на базе LLM с 2 миллиардами параметров и запустить его на телефоне. Но у слабой модели будут проблемы с самоидентификацией, а качество ответов в целом будет низким. Проблему самоидентификации можно исправить с помощью лаконичного JSON в системном промпте, а не длинного описания. Также по отдельности правила и примеры работают с такими моделями плохо, а вот их совместное использование даёт результат. Посмотреть пример такого AI-ассистента можно
здесь.
Пишите в комментариях, если хотите еще разобрать какую-то тему с конференции 💬