TGViewer
Android under the hood Android under the hood @android_under_the_hood · 1.53K subscribers
Post #21 1.08K
Как устроена библиотека Picasso?

Picasso - библиотека для загрузки картинок, разработанная крутыми перцами из Square Open Source.

Простой пример:

Picasso.get()
    .load(url)
    .into(imageView)


Разберёмся как работает:

1) Класс Picasso предоставляет API для работы с библиотекой, является Singleton'ом и содержит в себе основные компоненты, такие как: Dispatcher, список RequestHandler'ов, Application контекст и Handler, работающий на главном потоке для установки Bitmap в ImageView.
Немного магии: Picasso получает контекст из ContentProvider'а, зарегистрированного в манифесте библиотеки, если интересно гляньте код PicassoProvider.

2) При вызове метода Picasso.load() возвращается объект класса RequestCreator для настройки размеров, placeholder'ов, Transformation штук, политик кэша и тд, в общем всего, что касается Bitmap'ы и её преобразований.

3) RequestCreator.into() под капотом создаёт объект класса Request и ставит в очередь обработку запроса Dispatcher'у, если результат такого запроса ещё не был сохранён в memory кэш.
Dispatcher - внутренний класс библиотеки, отвечающий за обработку пачки запросов от Picasso.load(), выполняется на своём потоке и имеет свой Looper с Handler'ом, такая реализация удобна для обработки групп запросов.

4) Dispatcher обрабатывает запрос на отдельно выделенном пуле потоков PicassoExecutorService, дополнительно оборачивая его в BitmapHunter, который получает Bitmap'у от одного из RequestHandler'ов и пропускает через трансформации, если они были указаны.
RequestHandler - это обёртка над одним из источников Bitmap: ресурсы, assets, сеть и тд.

5) После того, как BitmapHunter получил и обработал Bitmap'у, результат обратно возвращается в Dispatcher, который передаёт его Handler'у из Picasso класса, где происходит установка Bitmap в ImageView через ImageViewAction, наследник от Action.
Класс Action абстрагирует способ обработки результата запроса.

Пишите в комментах ваше мнение и всем хорошего кода!
  • 👍 6
  • ❤ 2
  • 🔥 1
More from @android_under_the_hood
  1. Oct 4, 2026Всем привет, хочу поделиться проектом, который запустил 1 октября — ЗдесьЯ. Это цифровая с…
  2. Oct 2, 2026Kotlin lambdas, часть I. До версии Kotlin 2.0 лямбды компилировались в анонимные классы, р…
  3. Sep 27, 2026Делегат свойства в Kotlin. В Kotlin есть конструкция, которой нет в JVM: var name by NameD…
  4. Sep 23, 2026val vs var под капотом. На уровне Kotlin все просто: val x = 10 var y = 20 y = 30 // компи…
  5. Sep 20, 2026Возвращение Прошло уже полгода с последней записи на канале. За это время в моей жизни про…
  6. Feb 5, 2026Пару фактов о Go, часть II. 4) Вместо Kotlin Nullability указатели как в С/C++, то есть об…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →