Android Parcelable или Serializable? Павел Борзиков

  Рет қаралды 16,751

Android Broadcast. Все об Андроид разработке

Android Broadcast. Все об Андроид разработке

Күн бұрын

Из видео вы узнаете что такое Android Parcelable и Serializable, какая разница между ними, скорость работы и когда что стоит использовать
Эксперт - Павел Борзиков, Android разработчик в Avito
Начал свою карьеру разработчика в 2014 году в Краснодарском стартапе. Успел набраться опыта в разработке банковского приложения, сервисе доставки еды, а сейчас делает лучше жизнь пользователям Авито.
🔗 Подпишись на канал / @androidbroadcast
🔗 Avito.Tech avito.tech/
💰 Поддержать проект на Boosty bit.ly/3sratqQ или Patreon / android_broadcast
🔗 Telegram канал "Android Broadcast" ttttt.me/android_broadcast
🔗 Магазин мерча "Android Broadcast" clck.ru/YGEZ7
🔗 Слайды к докладу speakerdeck.com/androidbroadc...
🔗 Parcelable d.android.com/reference/andro...
🔗 Serializable d.android.com/reference/java/...
🔗 Externalizable d.android.com/reference/java/...
#AndroidBroadcast #Parcelable #Serializable #Externalizable #Java #Kotlin #IPC #Bundle #сериализация
0:00 Вступление
0:32 Сериализация
2:33 Рефлексия
4:42 Android Parcelable
8:03 Сравнение скорости Serializable и Parcelable
10:48 Минусы Parcelable
11:30 Classloader
14:35 Ограничения Parcelable
16:45 Версионирование в Serializable
20:08 Управление сериализацией
20:55 Externalizable
22:02 Скорость Externalizable
23:32 Заключение

Пікірлер: 104
@AndroidBroadcast
@AndroidBroadcast 2 жыл бұрын
💰 Поддержать проект на Boosty bit.ly/3sratqQ или Patreon patreon.com/android_broadcast 🔗 Telegram канал "Android Broadcast" ttttt.me/android_broadcast 🔗 Магазин мерча "Android Broadcast" clck.ru/YGGVT
@tyt66612
@tyt66612 2 жыл бұрын
Отличная подача, жду ещё видосов с этим автором)
@Dunmeri
@Dunmeri 2 жыл бұрын
Продублирую тут, может, кому тоже пригодится: Можно добавлять первым параметром int , записывая туда версию объекта. Это позволит сделать миграцию, тк первым считываем версию, и уже от неё пляшем (например, записываем значение по умолчанию вместо считывания несуществующего в сериализованных данных поля). Кейс крайне редкий, но пару раз в жизни пригодилось )
@alexarakcheyev9189
@alexarakcheyev9189 2 жыл бұрын
Отлично. Не доконца понимал, что такого разного в этих классах. Вы всё объяснили кристально чётко. Огромное спасибо.
@user-sw9dc2is3i
@user-sw9dc2is3i 2 жыл бұрын
1. kzfaq.info/get/bejne/qtGfaJeUz8mbaYk.html стоит поправить Parcelizable на Parcelable 2. При чем Parcel к разбору Serializable объектов? 3. А замеры с кастомной сериализацией было бы неплохо увидеть, ведь мы же существенно уменьшаем рефлексию. Рассказано доступно, но за кадром осталось несколько нюансов связанных с наследованием и объектными типами полей, например: parcelable класс, унаследованный от non-parcelable класса, или parcelable класс с non-parcelable полями, содержащими приватные поля и т..п. Ну и аналогичная ситуация для Serializable классов
@user-bx6jf9lr3t
@user-bx6jf9lr3t 2 жыл бұрын
по первому пункту, согласен, проглядел; второй вопрос не совсем понимаю, я ведь рассказываю и за Parcelable тоже, а рассказывать за него в отрыве от Parcel не совсем правильно; под кастомной сериализацией понимается именно собственное решение по сериализации или какаято внутренняя история java/kotlin типа Externalizable?; про нюансы можно было бы рассказать, но тут как в казино, главное вовремя остановиться) тут больше ставил перед собой задачу рассказать за основы, и о причинах тех или иных решений, возможно в будущем подготовлю выступление раскрывающие все эти вопросы
@user-sw9dc2is3i
@user-sw9dc2is3i 2 жыл бұрын
@@user-bx6jf9lr3t Второй вопрос - это при рассказе про Serializable на картинке Parcel kzfaq.info/get/bejne/qtGfaJeUz8mbaYk.html Кастомная сериализация - это когда мы создаем методы writeObject/readObject, в этом случае у нас остается доступ через рефлексию только к этим двум методам, а все остальные поля добавляются в поток без рефлексии и следовательно все должно работать гораздо быстрее.
@user-bx6jf9lr3t
@user-bx6jf9lr3t 2 жыл бұрын
@@user-sw9dc2is3i блин( там тоже опечатка( пропустили при прогонах( понял вопрос. так в таком случае мы получаем тоже самое что и Externalizable, а его мы замерили. Плюс в случае с writeObject/readObject нам обязательно надо использовать defaultReadObject/defaultWriteObject, и тут уже нет оптимизаций. Возможно мне так же следовало этот момент более ярче подсветить в презентации.
@user-sw9dc2is3i
@user-sw9dc2is3i 2 жыл бұрын
@@user-bx6jf9lr3t :) Объявляем все поля Transient, вызываем стандартные методы для записи метаданных класса, а потом пишем все данные в методе writeObjecе, ну и с чтением все точно также readObject. Да, про обязательный вызов дефолтных методов я подзабыл.
@user-bx6jf9lr3t
@user-bx6jf9lr3t 2 жыл бұрын
@@user-sw9dc2is3i интересный подход)
@hueynews7489
@hueynews7489 7 ай бұрын
Очень комфортно и понятно разложено. Спасибо Кирилл. Зови ребят из Авито почаще 😉
@mezencevsem
@mezencevsem Жыл бұрын
Ждал до конца когда расскажут про потерянный int, вот что значит захватить внимание)
@deadchannal
@deadchannal 2 жыл бұрын
Было очень полезно! Спасибо!
@romanabaev4318
@romanabaev4318 2 жыл бұрын
Класс, давайте больше такого контента!
@user-or5hj7sf3x
@user-or5hj7sf3x Ай бұрын
20:23 в описании говорится, что "поле, НЕ помеченное ..., НЕ будет ...". Видится, что первое НЕ лишнее, иначе теряется смысл
@avdim88
@avdim88 2 жыл бұрын
Спасибо. Хороший формат.
@divanlobkowski3473
@divanlobkowski3473 2 жыл бұрын
Огонь, надеюсь, еще увидимся.
@quverr
@quverr 2 жыл бұрын
Круто, очень детально, спасибо!
@vladislavaliev2894
@vladislavaliev2894 2 жыл бұрын
Спасибо, очень полезно и увлекательно!
@ilonayeletska2064
@ilonayeletska2064 2 жыл бұрын
Спасибо. Полезно
@borisveriga4062
@borisveriga4062 2 жыл бұрын
Топ! Особенно когда глубже в тему погружается
@epicarchitect
@epicarchitect 2 жыл бұрын
Наконец то я понял что это за магические классы, всегда откладывал этот вопрос, типа работает и пофиг. Хотелось бы еще видосик про анотацию @Serializable в котлине
@AndroidBroadcast
@AndroidBroadcast 2 жыл бұрын
Насколько знаю аннотация Serializable относится к библиотеке KotlinX Serialization, которая может сериализовать данные в различные форматы, например JSON
@user-zi8zw3yf2t
@user-zi8zw3yf2t 2 жыл бұрын
О, колпачков
@epicarchitect
@epicarchitect 2 жыл бұрын
@@user-zi8zw3yf2t о здравствуйте Презентер
@dmitriymitroshin7525
@dmitriymitroshin7525 2 жыл бұрын
Подробненько. Спасибо.
@user-be2cy2fb9u
@user-be2cy2fb9u 2 жыл бұрын
Круто, спасибо)
@CAMOBAP795
@CAMOBAP795 2 жыл бұрын
Большое спасибо за видео, радует что никаких изменений с 1.6 (а может и раньше) тут нет 11:33 - никогда не слышал такой оригинальной подводки к ClassLoader'ам). Интересно есть ли какая-то специфика тут по сравнению с Java SE?
@mr-re1ax
@mr-re1ax 2 жыл бұрын
Спасибо, было очень интересно и полезно!👍
@user-bx6jf9lr3t
@user-bx6jf9lr3t 2 жыл бұрын
Спасибо большое!)
@heroachilles
@heroachilles 2 жыл бұрын
Спасибо!
@neuzen
@neuzen 2 жыл бұрын
Качественно.
@9Golod
@9Golod Жыл бұрын
Круто, спасибо!)
@kirillsushilnikov9614
@kirillsushilnikov9614 Жыл бұрын
очень познавательно, спасибо.
@andrewdobosh2153
@andrewdobosh2153 2 жыл бұрын
Завтра на собеседование это расскажу:)
@mikhailbogdanov5607
@mikhailbogdanov5607 Жыл бұрын
прошел?)
@user-sf8xx1hq7c
@user-sf8xx1hq7c Жыл бұрын
Спасибо большое, теперь все стало прозрачно
@user-cs4dl3kk8r
@user-cs4dl3kk8r 2 жыл бұрын
Спасибо
@kotekapuchino
@kotekapuchino Жыл бұрын
Павел рассказал просто и полно о сложном. Спасибо!
@user-vx5nv2bm9o
@user-vx5nv2bm9o 2 жыл бұрын
Было интересно и полезно
@user-vy9rz5cl3n
@user-vy9rz5cl3n Жыл бұрын
Класс. Спасибо.
@codemachine19
@codemachine19 9 ай бұрын
очень интересная лекция. спасибо!
@KIRILLINGUSS21
@KIRILLINGUSS21 2 жыл бұрын
очень классный ролик, спасибо
@user-bx6jf9lr3t
@user-bx6jf9lr3t 2 жыл бұрын
Большое спасибо ^^
@greenlablestock2087
@greenlablestock2087 2 жыл бұрын
Супер
@namefamily957
@namefamily957 2 жыл бұрын
Во, это реально было интересно посмотреть и послушать!
@user-bx6jf9lr3t
@user-bx6jf9lr3t 2 жыл бұрын
спасибо!))
@Dunmeri
@Dunmeri 2 жыл бұрын
Отличный видос! Паша молодец! )
@user-bx6jf9lr3t
@user-bx6jf9lr3t 2 жыл бұрын
Спасибо!))
@serhiiwin3276
@serhiiwin3276 2 жыл бұрын
Побольше таких видео.
@AndroidBroadcast
@AndroidBroadcast 2 жыл бұрын
Да, я уже понял что есть ряд тем которых мне тоже стоит осветить. Они кажутся базовыми, но многие их упускают из-за того что считают слишком простыми. Потом ошибки глупые выходят. Спасибо Паши что своим таким разбором меня вдохновил на это
@Trecoolerok
@Trecoolerok 2 жыл бұрын
Что насчёт @Parcelize, мне кажется, полезная вещь.
@alexpro8317
@alexpro8317 2 жыл бұрын
Оч круто, впервые узнал про существование Externalizable. Мелкие помарки на видео - ерунда, докопаться можно до чего угодно
@user-bx6jf9lr3t
@user-bx6jf9lr3t 2 жыл бұрын
спасибо большое! ^^
@jamesalexander1062
@jamesalexander1062 2 жыл бұрын
Огонь
@user-bx6jf9lr3t
@user-bx6jf9lr3t 2 жыл бұрын
Спасибо! ^^
@temurisroilov5847
@temurisroilov5847 2 жыл бұрын
топ контент 🔥
@user-sp4gm7qb1b
@user-sp4gm7qb1b 2 жыл бұрын
Больше подобных видео
@eugenynikolaev3969
@eugenynikolaev3969 2 жыл бұрын
Получилось интересно) на 20:20 ошибка в тексте, "поле, не помеченное..", не должно быть частицы "не"
@user-bx6jf9lr3t
@user-bx6jf9lr3t 2 жыл бұрын
Да сори( у меня там встречаются оговорки(
@tov3801
@tov3801 6 ай бұрын
Жалко, что нельзя поставить несколько лайков))
@user-oc7py1vy6s
@user-oc7py1vy6s 2 жыл бұрын
Зачем нужны методы newArray(size: Int): Array и describeContents(): Int при реализации Parcelable? Документацию читал, но не понятно в каких сценариях их нужно использовать.
@AndroidBroadcast
@AndroidBroadcast 2 жыл бұрын
newArray() надо чтобы не создавать массивы динамически. Уменьшение рефлексии describeContents() использовал только в подклассах и уже не помню зачем
@DaniyarMukhanov
@DaniyarMukhanov 2 жыл бұрын
очень круто
@user-bx6jf9lr3t
@user-bx6jf9lr3t 2 жыл бұрын
Спасибо большое ^^
@artb7788
@artb7788 2 жыл бұрын
очень информативно, только айбайндер а не ибиндер, спасибо за контент
@qa8966
@qa8966 2 жыл бұрын
Паша, лапусик. Привет из fasten))
@user-bx6jf9lr3t
@user-bx6jf9lr3t 2 жыл бұрын
^^
@user-hc2vt5oj7t
@user-hc2vt5oj7t 2 жыл бұрын
класс
@annasartvlog
@annasartvlog 2 жыл бұрын
классное видео, немного отвлекает тема презентации с кляксами. хотелось бы более простую
@tyt66612
@tyt66612 2 жыл бұрын
Как по мне наоборот симпатично выглядит, примерно как ваше личико в аватарке 😏
@handleftman
@handleftman 2 жыл бұрын
Полезное видео
@user-bx6jf9lr3t
@user-bx6jf9lr3t 2 жыл бұрын
Спасибо!
@handleftman
@handleftman 2 жыл бұрын
@@user-bx6jf9lr3t благодаря такой подаче информации легче собрать этот огромный пазл, будем рады видеть новые видео от Вас!
@alexandermikulich9346
@alexandermikulich9346 2 жыл бұрын
Хорош
@azatnabiullin2263
@azatnabiullin2263 4 ай бұрын
На 5:52 говорится, что с Parcelable мы не завязываемся на имена переменных, в отличие от Serializable. А как мы в Serializable завязываемся на имена?
@azatnabiullin2263
@azatnabiullin2263 4 ай бұрын
Всё, понял😅
@speedrages
@speedrages Жыл бұрын
Вопрос от новичка: А где это должно пригодиться? В какой момент разработки приложения я пойму что мне нужно это? Подскажите пожалуйста
@AndroidBroadcast
@AndroidBroadcast Жыл бұрын
Любое сохранение состояния на диск связано с этими классами и будет полезно знать о них больше
@speedrages
@speedrages Жыл бұрын
@@AndroidBroadcast благодарю за ответ
@hievery9678
@hievery9678 2 жыл бұрын
Parcelable нельзя только разрабам приложений хранить на диске. Системе можно. Ведь при той же смерти процесса данные из onSaveInstanceState запишутся на диск. А они Parcelable. Однако, единственный случай, когда поля посылки могут изменяться это переустановка приложения, а при ней все сохранённое состояние сбросится системой. Поэтому проблемы неправильной расшифровки Parcelable тут нет. Я правильно рассуждаю?
@AndroidBroadcast
@AndroidBroadcast 2 жыл бұрын
Нет. Нельзя сохранить данные в постоянное хранилище, чтобы когда их потом открыть. Система сохраняет эти данные временно. И при смерти процесса, не из-за нехватки ресурсов в системе, уничтожит все эти данные, что не приведёт к проблемам
@hievery9678
@hievery9678 2 жыл бұрын
@@AndroidBroadcast Видимо я плохо выразился, потому что ответ, что я рассуждал неверно, хотя по содержанию текста все сходится. Да, хранить хранить данные на диск через Parcelable, чтобы потом открыть нельзя. Но система так делает. И делает так только потому что у нее есть механизмы подтирания сохранённых на диск Parcelable, на случай, когда структура Parcelable класса изменилась. А изменится она может только при обновлении приложения. Именно тогда система и подчистит весь стейт приложения (происхождения onSaveInstanceState и типо того). В том числе подчистятся и все сохраненные Parcelable классы.
@y2kot
@y2kot 2 жыл бұрын
Захотел пройти собеседование в Авито. Спасибо за полезный материал. P.S. на слайде с ручной сериализацией опечатка в описании аннотации
@user-bx6jf9lr3t
@user-bx6jf9lr3t 2 жыл бұрын
Будем ждать на собесах ^^
@bolnoi8
@bolnoi8 2 жыл бұрын
Надо будет про рефлексию отдельно почитать, а то определение знаю, а отличить не смогу. К примеру, считается за рефлексию такой вызов: this::class.java.simpleName?
@AndroidBroadcast
@AndroidBroadcast 2 жыл бұрын
Да
@AndroidBroadcast
@AndroidBroadcast 2 жыл бұрын
Хотя такой вызов может быть оптимизирован с помощью R8 и не будет рефлексии
@bolnoi8
@bolnoi8 2 жыл бұрын
@@AndroidBroadcast Спасибо
@john_kolt
@john_kolt 2 жыл бұрын
Это байт на комменты? Числа не пропадают, а в бинарном формате хранятся.
@Nidvoraich
@Nidvoraich 2 жыл бұрын
Я не очень понял, почему Парсэлабл нельзя хранить в ПЗУ
@AndroidBroadcast
@AndroidBroadcast 2 жыл бұрын
Так как его формат привязан к версии прошивки. Если у вас она обновится, то не факт, что вы сможете прочитать эти данные. Parcelable сериализуется исключительно пока живет приложение и убивается когда вы его удаляете из recent или происходит обновление прошивки, обновление вашего приложения или всё другое что может повлиять на работу приложения
@Nidvoraich
@Nidvoraich 2 жыл бұрын
@@AndroidBroadcast спасибо!
@Chernov1984
@Chernov1984 2 жыл бұрын
+
@user-zi8zw3yf2t
@user-zi8zw3yf2t 2 жыл бұрын
Ну как бы parcelable так же можно в файл сохранить
@AndroidBroadcast
@AndroidBroadcast 2 жыл бұрын
Сохранить - да, но в докладе рассказывается почем не стоит хранить долго и чем черевата ошибка
@user-zi8zw3yf2t
@user-zi8zw3yf2t 2 жыл бұрын
@@AndroidBroadcast прослушал этот момент
@tspa77
@tspa77 2 жыл бұрын
Продвигаем канал ;)
@AndroidBroadcast
@AndroidBroadcast 2 жыл бұрын
спс
@agp1444
@agp1444 2 жыл бұрын
первый раз слышу, чтобы reflection переводили как рефлексия. вы в слово вдумайтесь прежде , чем переводить
@AndroidBroadcast
@AndroidBroadcast 2 жыл бұрын
Как надо переводить?
@agp1444
@agp1444 2 жыл бұрын
@@AndroidBroadcast сорян. был не прав. оказывается, ее много где рефлексией называют))) хотя рефлекшн и рефлексия - это прям совсем не одно и то же
@vahekhachaturian2424
@vahekhachaturian2424 2 жыл бұрын
Просто коммент для продвижения
@AndroidBroadcast
@AndroidBroadcast 2 жыл бұрын
Спс
Все мои любимые плагины Android Studio
9:48
Android Broadcast. Все об Андроид разработке
Рет қаралды 16 М.
Binder - как устроена работа с несколькими процессами в Android
56:44
Android Broadcast. Все об Андроид разработке
Рет қаралды 25 М.
ОСКАР ИСПОРТИЛ ДЖОНИ ЖИЗНЬ 😢 @lenta_com
01:01
3 wheeler new bike fitting
00:19
Ruhul Shorts
Рет қаралды 52 МЛН
NERF WAR HEAVY: Drone Battle!
00:30
MacDannyGun
Рет қаралды 25 МЛН
lateinit - это зло и «костыль» Kotlin. Dagger 2 всему виной
12:28
Android Broadcast. Все об Андроид разработке
Рет қаралды 16 М.
Сериализация и Маршалинг
11:23
Volodya Mozhenkov
Рет қаралды 6 М.
Немультиплатформенные привычки Android-разработки
38:43
Android Broadcast. Все об Андроид разработке
Рет қаралды 7 М.
Android - Погружение в JVM
1:48:48
Young&&Yandex: мобильная разработка
Рет қаралды 7 М.
"Дизайн kotlinx.serialization" - Леонид Старцев@JetBrains
39:19
Android Broadcast. Все об Андроид разработке
Рет қаралды 2 М.
Google I/O 2024 - ИИ, Android 15 и новые Google Glass
22:47
ОСКАР ИСПОРТИЛ ДЖОНИ ЖИЗНЬ 😢 @lenta_com
01:01