Тёмный

How Retrofit works. Java Dynamic Proxy. Library architecture [RU] 

Android Broadcast. Все об Андроид разработке
Просмотров 20 тыс.
50% 1

Опубликовано:

 

7 сен 2024

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 55   
@AndroidBroadcast
@AndroidBroadcast 2 года назад
🔗 Код из примера github.com/androidbroadcast/DynamicProxySample 🔗 Telegram канал "Android Broadcast" ttttt.me/android_broadcast 💰 Поддержать проект на Boosty boosty.to/androidbroadcast или Patreon patreon.com/android_broadcast 🔗 Dynamic Proxy Classes docs.oracle.com/javase/8/docs/technotes/guides/reflection/proxy.html 0:00 Вступление 1:17 Генерация кода в Retorfit 1:49 Задача для примера 2:20 Кодинг 22:46 Проверка API 25:22 Скорость работы 28:24 Заключение
@ashpocatcher3338
@ashpocatcher3338 2 года назад
Спасибо за выпуск. Всегда наивно полагал, что retrofit сделан какой-то магией с помощью annotation processing. Было бы здорово в одном из следующи выпусков разобрать, как работает LeakCanary.
@badadinfanti4553
@badadinfanti4553 2 года назад
"Вряд ли кто-то на моем канале пишет активно на джаве под андроид" - только так и пишем) Но у нас специфика такая - пишем библиотеки довольно таки низкоуровневые, в частности для работы с NFC, эмуляцией/чтения пластиковых карточек смартфоном и т.д. Кстати, на банковских карточках крутится облегченная версия джава-машины, если кто не знал) А когда вы подносите карту к банкомату, на нее подается питание и джава запускается. Но там сильно все порезано, для таких целей приходится писать прям сильно оптимизированный код
@pigiion
@pigiion 2 года назад
не ясно причем тут java. Сам не раз писал код для чтения nfc в мобилке, все делалось на котлине и было ок
@badadinfanti4553
@badadinfanti4553 2 года назад
@@pigiion ну вот вы сами себе и ответили. вы писали для ЧТЕНИЯ nfc, а если бы писали что-то посложнее hello world для nfc, то поняли бы, о чем речь. а речь идет об ЭМУЛЯЦИИ карт. чтение любой джун-школьник реализовать сможет. а тут, как я уже объяснил, происходит полноценная эмуляция карт (ядро вообще на с++ написано) да и кодовая база одна с джава проектами непосредственно для ПЛАСТИКОВЫХ карт. там одних только стандартов на несколько томов толстенных книг
@pavelgulevich2675
@pavelgulevich2675 2 года назад
Только сегодня подумал, как же будет грустно без роликов Кирилла Розова с объяснением работы тех или иных штук. Спасибо!
@AndroidBroadcast
@AndroidBroadcast 2 года назад
Так ролики же на месте
@maksonic_official
@maksonic_official 2 года назад
Ничего не понял( Что это и для чего нужно вообще, буду разбираться! Спасибо Кирилл!!! Очень качественная подача в материале, правда у меня не хватает экспертности чтобы осознать это, пока-что. P.s в 4к очень хорошо видно пятно из пыли на футболке)
@AndroidBroadcast
@AndroidBroadcast 2 года назад
В следующий раз буду внимательнее
@mitiaygorodov4939
@mitiaygorodov4939 2 года назад
Спасибо за твою работу! Если будет возможность, рассмотри пожалуйста лучшие практики построения нетворкинга в приложении. Или то, как ты бы рекомендовал это делать, чтобы результат был максимально гибким и эффективным.
@trekmaxlebyaga
@trekmaxlebyaga 2 года назад
Огромное спасибо! Просто лучший)
@iv2649
@iv2649 2 года назад
Очень полезненько! Спасибо за ликбез 👍
@cusxy
@cusxy 2 года назад
Отличный выпуск!
@user-by1id2ix4h
@user-by1id2ix4h 2 года назад
Кирилл, спасибо тебе за шикарный контент
@EgorChebotarev
@EgorChebotarev Год назад
насчет 26:21 Оптимизация рефлексии основанная на определении java машиной уровня понимания объекта java. Class object и Reflection понимается лучше и с вызовами легче ,чем простой кастомный класс. Reflection динамически развертывается большой объем кода , но GC сворачивает Рефлексию без мусора и в последующих вызовов это работает без лишних GC волн
@user-ml3cw7xz8b
@user-ml3cw7xz8b 2 года назад
Спасибо автору,классно видео
@BOOMvrn
@BOOMvrn 2 года назад
Только вчера думал как же реализовать лучше свою обертку над ретрофитом с кучей функций, что бы не создавать миллион методов с разными параметрами. И это решение прям будет в тему, сделаю на основе него. Спасибо
@ds6325
@ds6325 2 года назад
проорал с клички собаки ) echo гав на 14:35 выпуск прервался запуском бина в комнате
@nbshox
@nbshox 2 года назад
не знаю к счастю или наоборот, но я пишу на все еще Джаве =) 2:50
@badadinfanti4553
@badadinfanti4553 2 года назад
Кирилл, подскажи, а если мы захотим возвращать результат из AnalyticsTracker, то как нам это лучше сделать? Типа, как Call у ретрофита
@AndroidBroadcast
@AndroidBroadcast 2 года назад
Это можно также делать без проблем. Технология в методах имеет Object в качестве результата, а каст к нужному типу произойдет. Также получить информацию про тив вы сможете внутри прокси
@badadinfanti4553
@badadinfanti4553 2 года назад
​@@AndroidBroadcast Извиняюсь, перепутал интерфейс. Не AnalyticsTracker из либы, а AppAnalytics, который в sample app лежит. Вот чтобы он возвращал результат. Но, думаю, суть от этого не меняется) Благодарю за ответ!
@igorm7480
@igorm7480 2 года назад
Выпуск топ! Жаль только что parameterCount у метода работает с 26 го api
@AndroidBroadcast
@AndroidBroadcast 2 года назад
Да, на старых версиях приходилось с этим костылять
@areyana1735
@areyana1735 2 года назад
@@AndroidBroadcast А как это в теории обойти, гугл особо ничего не дал
@JosephKnecht160
@JosephKnecht160 2 года назад
Благодарю за крутое объяснение!
@schnaps1981
@schnaps1981 2 года назад
класс!
@h_o_l_m_i
@h_o_l_m_i 2 года назад
спасибо! было очень полезно!
@user-pm2ux7qr7h
@user-pm2ux7qr7h 2 года назад
Спасибо за видео, было полезно! Но кажется что выглядит как сплошная плохая практика, скрыть детали реализации можно и используя классы. При том api будет более очевидным и возможности/ограничения библиотеки будут понятны из кода использования
@AndroidBroadcast
@AndroidBroadcast 2 года назад
Если скрыть детали реализации используя классы, то придется весь код каждый раз писать руками или вызывать какие-то стандартные методы. Интерфейс + аннотации + Java Dynamic Proxy позволяют описывать все декларативно без погружения в реализацию.
@user-ii2zf5he8d
@user-ii2zf5he8d 2 года назад
Спасибо за видео! С Retrofit получилось сделать, а подскажите, пожалуйста Room таким же образом делается? На основе Entity создаем таблицы, а из аннотаций методов Dao получаем информацию о запросе, вот только там еще зачем-то абстрактный класс, наследуемый от RoomDatabase появляется
@AndroidBroadcast
@AndroidBroadcast 2 года назад
Нет, Room уже использует процессинг аннотаций и генерирует класса для работы с SQL
@user-ii2zf5he8d
@user-ii2zf5he8d 2 года назад
@@AndroidBroadcast спасибо!
@alexandersuvorov5465
@alexandersuvorov5465 2 года назад
Объясните, пожалуйста, зачем использовать Java Dynamic Proxy, если есть annotation processing? Ведь намного лучше переносить всю работу в compile time, нежели использовать рефлексию? Я провожу аналогию при сравнении Dagger 1, который работал на рефлексии и Dagger 2, использующий кодогенерацию.
@AndroidBroadcast
@AndroidBroadcast 2 года назад
У процессинга аннотаций есть минусы: - сложнее в реализации - процессинг аннотаций делают сборку больше и не позволяет использовать инкрементальную компиляцию - процессинг кода генерит код, что приводит к долгому времени индекса, поиска и компиляции Часть их проблем решаются, но все равно создаётся неудобство. Java Dynamic Proxy решает одни проблемы и создаёт новые
@alexandersuvorov5465
@alexandersuvorov5465 2 года назад
@@AndroidBroadcast спасибо! Как считаете, с развитием KSP и потенциальной миграции всех библиотек, использующих kapt на KSP, технология Java Dynamic Proxy не станет менее актуальной? Ведь по сути переход на KSP минимизирует минусы текущей реализации процессинга аннотаций. Вопрос касается именно разработки под Android на Kotlin.
@AndroidBroadcast
@AndroidBroadcast 2 года назад
К сожалению, пока нет информации чтобы сказать что KSP - это серебряная пуля
@ahtoxa-vo7om
@ahtoxa-vo7om 2 года назад
Почему в не-дебажных сборках стоит отключать проверки? Исключительно оптимизация?
@AndroidBroadcast
@AndroidBroadcast 2 года назад
Да, чтобы лишней рефлексии не было
@user-cd8fg9pi5p
@user-cd8fg9pi5p Год назад
Добрый день. На какой модели мака работаете ?
@AndroidBroadcast
@AndroidBroadcast Год назад
Я сам работаю на двух MacBook Pro 16"/32 GB RAM/M1 PRO и M1 MAX в топовых конфигах ядер. Но учтите что один комп рабочий на огромный проект, а второй для кода и монтажа видео + кучи работы на коленях
@user-cd8fg9pi5p
@user-cd8fg9pi5p Год назад
@@AndroidBroadcast Спасибо за фидбэк. Купил MacBook Pro 16"M2 Max 32 GB/RAM 1Tb/SSD полностью доволен производительностью 👍
@AndroidBroadcast
@AndroidBroadcast Год назад
Поздравляю!
@user-kk1yi2sz1d
@user-kk1yi2sz1d 2 года назад
спасибо!
@aleksandrvolkov4310
@aleksandrvolkov4310 2 года назад
Хочется ещё видео по сравнению retrofit и ktor
@qavan
@qavan 2 года назад
Как раз 2.0.0 stable вышел😀
@AndroidBroadcast
@AndroidBroadcast 2 года назад
Такого точно не будет. Не интересно делать
@user-ek7ho8rb9x
@user-ek7ho8rb9x 2 года назад
За урок - спасибо. А по поводу Ява/Котлин. Я из тех, кто пишет на Ява, Котлин мне не понравился.
@AndroidBroadcast
@AndroidBroadcast 2 года назад
Значит в Android вам будет все сложнее пользоваться результатами сообщества
@rustamsafarovrs
@rustamsafarovrs 2 года назад
best
@sergiokornilov
@sergiokornilov 2 года назад
Гав-гав!
@putinstop5940
@putinstop5940 2 года назад
Что вообще происходит?) на этом видео показано как сделать ретрофит своими руками?
@AndroidBroadcast
@AndroidBroadcast 2 года назад
Вполне можно будет сделать с этими знаниями
@user-lw9nu9ml8w
@user-lw9nu9ml8w 2 года назад
А есть объяснение ретрофита для полных нубов?
@AndroidBroadcast
@AndroidBroadcast 2 года назад
Что там надо обяснить?
Далее
Cristiano Ronaldo Surpassed Me! #shorts
00:17
Просмотров 16 млн
Dagger в Android на практике с MVVM
32:41