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

Поделиться
HTML-код
  • Опубликовано: 26 ноя 2024

Комментарии • 103

  • @AndroidBroadcast
    @AndroidBroadcast  3 года назад +5

    💰 Поддержать проект на Boosty bit.ly/3sratqQ или Patreon patreon.com/android_broadcast
    🔗 Telegram канал "Android Broadcast" ttttt.me/android_broadcast
    🔗 Магазин мерча "Android Broadcast" clck.ru/YGGVT

  • @Dunmeri
    @Dunmeri 3 года назад +17

    Продублирую тут, может, кому тоже пригодится:
    Можно добавлять первым параметром int , записывая туда версию объекта. Это позволит сделать миграцию, тк первым считываем версию, и уже от неё пляшем (например, записываем значение по умолчанию вместо считывания несуществующего в сериализованных данных поля). Кейс крайне редкий, но пару раз в жизни пригодилось )

  • @tyt66612
    @tyt66612 3 года назад +21

    Отличная подача, жду ещё видосов с этим автором)

  • @alexarakcheyev9189
    @alexarakcheyev9189 3 года назад +6

    Отлично. Не доконца понимал, что такого разного в этих классах. Вы всё объяснили кристально чётко. Огромное спасибо.

  • @hueynews7489
    @hueynews7489 Год назад +1

    Очень комфортно и понятно разложено. Спасибо Кирилл. Зови ребят из Авито почаще 😉

  • @PavloOleksenko
    @PavloOleksenko 3 года назад +10

    1. ruclips.net/video/tko54cjc79U/видео.html стоит поправить Parcelizable на Parcelable
    2. При чем Parcel к разбору Serializable объектов?
    3. А замеры с кастомной сериализацией было бы неплохо увидеть, ведь мы же существенно уменьшаем рефлексию.
    Рассказано доступно, но за кадром осталось несколько нюансов связанных с наследованием и объектными типами полей, например: parcelable класс, унаследованный от non-parcelable класса, или parcelable класс с non-parcelable полями, содержащими приватные поля и т..п. Ну и аналогичная ситуация для Serializable классов

    • @pbKruasan
      @pbKruasan 3 года назад +1

      по первому пункту, согласен, проглядел;
      второй вопрос не совсем понимаю, я ведь рассказываю и за Parcelable тоже, а рассказывать за него в отрыве от Parcel не совсем правильно;
      под кастомной сериализацией понимается именно собственное решение по сериализации или какаято внутренняя история java/kotlin типа Externalizable?;
      про нюансы можно было бы рассказать, но тут как в казино, главное вовремя остановиться) тут больше ставил перед собой задачу рассказать за основы, и о причинах тех или иных решений, возможно в будущем подготовлю выступление раскрывающие все эти вопросы

    • @PavloOleksenko
      @PavloOleksenko 3 года назад

      @@pbKruasan
      Второй вопрос - это при рассказе про Serializable на картинке Parcel ruclips.net/video/tko54cjc79U/видео.html
      Кастомная сериализация - это когда мы создаем методы writeObject/readObject, в этом случае у нас остается доступ через рефлексию только к этим двум методам, а все остальные поля добавляются в поток без рефлексии и следовательно все должно работать гораздо быстрее.

    • @pbKruasan
      @pbKruasan 3 года назад

      @@PavloOleksenko блин( там тоже опечатка( пропустили при прогонах(
      понял вопрос. так в таком случае мы получаем тоже самое что и Externalizable, а его мы замерили. Плюс в случае с writeObject/readObject нам обязательно надо использовать defaultReadObject/defaultWriteObject, и тут уже нет оптимизаций. Возможно мне так же следовало этот момент более ярче подсветить в презентации.

    • @PavloOleksenko
      @PavloOleksenko 3 года назад

      @@pbKruasan :) Объявляем все поля Transient, вызываем стандартные методы для записи метаданных класса, а потом пишем все данные в методе writeObjecе, ну и с чтением все точно также readObject.
      Да, про обязательный вызов дефолтных методов я подзабыл.

    • @pbKruasan
      @pbKruasan 3 года назад

      @@PavloOleksenko интересный подход)

  • @divanlobkowski3473
    @divanlobkowski3473 3 года назад +2

    Огонь, надеюсь, еще увидимся.

  • @mezencevsem
    @mezencevsem Год назад +2

    Ждал до конца когда расскажут про потерянный int, вот что значит захватить внимание)

  • @Tetiana-k2w
    @Tetiana-k2w Год назад +1

    Спасибо большое, теперь все стало прозрачно

  • @romanabaev4318
    @romanabaev4318 3 года назад +4

    Класс, давайте больше такого контента!

  • @Солнцеликий-б3ъ
    @Солнцеликий-б3ъ 6 месяцев назад

    20:23 в описании говорится, что "поле, НЕ помеченное ..., НЕ будет ...". Видится, что первое НЕ лишнее, иначе теряется смысл

  • @epicarchitect
    @epicarchitect 3 года назад +8

    Наконец то я понял что это за магические классы, всегда откладывал этот вопрос, типа работает и пофиг. Хотелось бы еще видосик про анотацию @Serializable в котлине

    • @AndroidBroadcast
      @AndroidBroadcast  3 года назад +5

      Насколько знаю аннотация Serializable относится к библиотеке KotlinX Serialization, которая может сериализовать данные в различные форматы, например JSON

    • @ДенисСаранин-м1и
      @ДенисСаранин-м1и 3 года назад

      О, колпачков

    • @epicarchitect
      @epicarchitect 3 года назад

      @@ДенисСаранин-м1и о здравствуйте Презентер

  • @andrewdobosh2153
    @andrewdobosh2153 3 года назад +4

    Завтра на собеседование это расскажу:)

  • @kotekapuchino
    @kotekapuchino Год назад

    Павел рассказал просто и полно о сложном. Спасибо!

  • @avdim88
    @avdim88 3 года назад +2

    Спасибо. Хороший формат.

  • @neuzen
    @neuzen 3 года назад +4

    Качественно.

  • @СергейПанов-з3ц
    @СергейПанов-з3ц 3 года назад +1

    Зачем нужны методы newArray(size: Int): Array и describeContents(): Int при реализации Parcelable?
    Документацию читал, но не понятно в каких сценариях их нужно использовать.

    • @AndroidBroadcast
      @AndroidBroadcast  3 года назад +5

      newArray() надо чтобы не создавать массивы динамически. Уменьшение рефлексии
      describeContents() использовал только в подклассах и уже не помню зачем

  • @quverr
    @quverr 3 года назад +2

    Круто, очень детально, спасибо!

  • @serhiiwin3276
    @serhiiwin3276 3 года назад +3

    Побольше таких видео.

    • @AndroidBroadcast
      @AndroidBroadcast  3 года назад +2

      Да, я уже понял что есть ряд тем которых мне тоже стоит осветить. Они кажутся базовыми, но многие их упускают из-за того что считают слишком простыми. Потом ошибки глупые выходят.
      Спасибо Паши что своим таким разбором меня вдохновил на это

  • @namefamily957
    @namefamily957 3 года назад +3

    Во, это реально было интересно посмотреть и послушать!

    • @pbKruasan
      @pbKruasan 3 года назад +1

      спасибо!))

  • @vladislavaliev2894
    @vladislavaliev2894 3 года назад +2

    Спасибо, очень полезно и увлекательно!

  • @dmitriymitroshin7525
    @dmitriymitroshin7525 3 года назад +1

    Подробненько. Спасибо.

  • @codemachine19
    @codemachine19 Год назад

    очень интересная лекция. спасибо!

  • @КонстантинЪЪЪ
    @КонстантинЪЪЪ 3 года назад +2

    Круто, спасибо)

  • @alexpro8317
    @alexpro8317 3 года назад +2

    Оч круто, впервые узнал про существование Externalizable. Мелкие помарки на видео - ерунда, докопаться можно до чего угодно

    • @pbKruasan
      @pbKruasan 3 года назад

      спасибо большое! ^^

  • @heroachilles
    @heroachilles 2 года назад +1

    Спасибо!

  • @deadchannal
    @deadchannal 3 года назад +1

    Было очень полезно! Спасибо!

  • @mr-re1ax
    @mr-re1ax 3 года назад +2

    Спасибо, было очень интересно и полезно!👍

    • @pbKruasan
      @pbKruasan 3 года назад

      Спасибо большое!)

  • @tov3801
    @tov3801 11 месяцев назад +1

    Жалко, что нельзя поставить несколько лайков))

  • @ilonayeletska2064
    @ilonayeletska2064 3 года назад +2

    Спасибо. Полезно

  • @kirillsushilnikov9614
    @kirillsushilnikov9614 2 года назад

    очень познавательно, спасибо.

  • @Dunmeri
    @Dunmeri 3 года назад +2

    Отличный видос! Паша молодец! )

    • @pbKruasan
      @pbKruasan 3 года назад

      Спасибо!))

  • @Trecoolerok
    @Trecoolerok 3 года назад +3

    Что насчёт @Parcelize, мне кажется, полезная вещь.

  • @CAMOBAP795
    @CAMOBAP795 3 года назад +2

    Большое спасибо за видео, радует что никаких изменений с 1.6 (а может и раньше) тут нет
    11:33 - никогда не слышал такой оригинальной подводки к ClassLoader'ам). Интересно есть ли какая-то специфика тут по сравнению с Java SE?

  • @АндрейФедоров-к1ч

    Класс. Спасибо.

  • @artb7788
    @artb7788 2 года назад

    очень информативно, только айбайндер а не ибиндер, спасибо за контент

  • @eugenynikolaev3969
    @eugenynikolaev3969 3 года назад +1

    Получилось интересно) на 20:20 ошибка в тексте, "поле, не помеченное..", не должно быть частицы "не"

    • @pbKruasan
      @pbKruasan 3 года назад

      Да сори( у меня там встречаются оговорки(

  • @greenlablestock2087
    @greenlablestock2087 3 года назад +2

    Супер

  • @матжонфаттоев-щ5ш
    @матжонфаттоев-щ5ш 3 года назад +1

    Было интересно и полезно

  • @ПавелЗубко-ц8ч
    @ПавелЗубко-ц8ч 3 года назад +1

    Спасибо

  • @ВладСтаростин-м7ш
    @ВладСтаростин-м7ш 3 года назад +1

    Больше подобных видео

  • @speedrages
    @speedrages Год назад +1

    Вопрос от новичка: А где это должно пригодиться? В какой момент разработки приложения я пойму что мне нужно это? Подскажите пожалуйста

    • @AndroidBroadcast
      @AndroidBroadcast  Год назад +1

      Любое сохранение состояния на диск связано с этими классами и будет полезно знать о них больше

    • @speedrages
      @speedrages Год назад +1

      @@AndroidBroadcast благодарю за ответ

  • @jamesalexander1062
    @jamesalexander1062 3 года назад +2

    Огонь

    • @pbKruasan
      @pbKruasan 3 года назад

      Спасибо! ^^

  • @temurisroilov5847
    @temurisroilov5847 3 года назад +2

    топ контент 🔥

  • @qa8966
    @qa8966 2 года назад +1

    Паша, лапусик. Привет из fasten))

  • @annasartvlog
    @annasartvlog 3 года назад +1

    классное видео, немного отвлекает тема презентации с кляксами. хотелось бы более простую

    • @tyt66612
      @tyt66612 3 года назад +1

      Как по мне наоборот симпатично выглядит, примерно как ваше личико в аватарке 😏

  • @KIRILLINGUSS21
    @KIRILLINGUSS21 3 года назад +1

    очень классный ролик, спасибо

    • @pbKruasan
      @pbKruasan 3 года назад

      Большое спасибо ^^

  • @azatnabiullin2263
    @azatnabiullin2263 9 месяцев назад

    На 5:52 говорится, что с Parcelable мы не завязываемся на имена переменных, в отличие от Serializable. А как мы в Serializable завязываемся на имена?

  • @DaniyarMukhanov
    @DaniyarMukhanov 3 года назад +1

    очень круто

    • @pbKruasan
      @pbKruasan 3 года назад

      Спасибо большое ^^

  • @ВиталийМолчанов-х5ь
    @ВиталийМолчанов-х5ь 2 года назад +1

    класс

  • @handleftman
    @handleftman 3 года назад +1

    Полезное видео

    • @pbKruasan
      @pbKruasan 3 года назад +1

      Спасибо!

    • @handleftman
      @handleftman 3 года назад +2

      @@pbKruasan благодаря такой подаче информации легче собрать этот огромный пазл, будем рады видеть новые видео от Вас!

  • @hievery9678
    @hievery9678 3 года назад

    Parcelable нельзя только разрабам приложений хранить на диске. Системе можно.
    Ведь при той же смерти процесса данные из onSaveInstanceState запишутся на диск. А они Parcelable. Однако, единственный случай, когда поля посылки могут изменяться это переустановка приложения, а при ней все сохранённое состояние сбросится системой. Поэтому проблемы неправильной расшифровки Parcelable тут нет.
    Я правильно рассуждаю?

    • @AndroidBroadcast
      @AndroidBroadcast  3 года назад +1

      Нет. Нельзя сохранить данные в постоянное хранилище, чтобы когда их потом открыть. Система сохраняет эти данные временно. И при смерти процесса, не из-за нехватки ресурсов в системе, уничтожит все эти данные, что не приведёт к проблемам

    • @hievery9678
      @hievery9678 3 года назад

      @@AndroidBroadcast
      Видимо я плохо выразился, потому что ответ, что я рассуждал неверно, хотя по содержанию текста все сходится.
      Да, хранить хранить данные на диск через Parcelable, чтобы потом открыть нельзя.
      Но система так делает.
      И делает так только потому что у нее есть механизмы подтирания сохранённых на диск Parcelable, на случай, когда структура Parcelable класса изменилась.
      А изменится она может только при обновлении приложения. Именно тогда система и подчистит весь стейт приложения (происхождения onSaveInstanceState и типо того).
      В том числе подчистятся и все сохраненные Parcelable классы.

  • @alexandermikulich9346
    @alexandermikulich9346 3 года назад +2

    Хорош

  • @john_kolt
    @john_kolt 2 года назад +1

    Это байт на комменты? Числа не пропадают, а в бинарном формате хранятся.

  • @Nidvoraich
    @Nidvoraich 3 года назад

    Я не очень понял, почему Парсэлабл нельзя хранить в ПЗУ

    • @AndroidBroadcast
      @AndroidBroadcast  3 года назад +3

      Так как его формат привязан к версии прошивки. Если у вас она обновится, то не факт, что вы сможете прочитать эти данные. Parcelable сериализуется исключительно пока живет приложение и убивается когда вы его удаляете из recent или происходит обновление прошивки, обновление вашего приложения или всё другое что может повлиять на работу приложения

    • @Nidvoraich
      @Nidvoraich 3 года назад

      @@AndroidBroadcast спасибо!

  • @bolnoi8
    @bolnoi8 3 года назад

    Надо будет про рефлексию отдельно почитать, а то определение знаю, а отличить не смогу.
    К примеру, считается за рефлексию такой вызов: this::class.java.simpleName?

    • @AndroidBroadcast
      @AndroidBroadcast  3 года назад +2

      Да

    • @AndroidBroadcast
      @AndroidBroadcast  3 года назад +2

      Хотя такой вызов может быть оптимизирован с помощью R8 и не будет рефлексии

    • @bolnoi8
      @bolnoi8 3 года назад

      @@AndroidBroadcast Спасибо

  • @ДенисСаранин-м1и
    @ДенисСаранин-м1и 3 года назад

    Ну как бы parcelable так же можно в файл сохранить

    • @AndroidBroadcast
      @AndroidBroadcast  3 года назад

      Сохранить - да, но в докладе рассказывается почем не стоит хранить долго и чем черевата ошибка

    • @ДенисСаранин-м1и
      @ДенисСаранин-м1и 3 года назад

      @@AndroidBroadcast прослушал этот момент

  • @Chernov1984
    @Chernov1984 3 года назад +3

    +

  • @agp1444
    @agp1444 3 года назад

    первый раз слышу, чтобы reflection переводили как рефлексия. вы в слово вдумайтесь прежде , чем переводить

    • @AndroidBroadcast
      @AndroidBroadcast  3 года назад

      Как надо переводить?

    • @agp1444
      @agp1444 3 года назад

      @@AndroidBroadcast сорян. был не прав. оказывается, ее много где рефлексией называют))) хотя рефлекшн и рефлексия - это прям совсем не одно и то же

  • @y2kot
    @y2kot 3 года назад +1

    Захотел пройти собеседование в Авито. Спасибо за полезный материал.
    P.S. на слайде с ручной сериализацией опечатка в описании аннотации

    • @pbKruasan
      @pbKruasan 3 года назад

      Будем ждать на собесах ^^

  • @tspa77
    @tspa77 3 года назад +2

    Продвигаем канал ;)

  • @vahekhachaturian2424
    @vahekhachaturian2424 3 года назад +2

    Просто коммент для продвижения

  • @9Golod
    @9Golod Год назад

    Круто, спасибо!)