Что такое стабильный тип интерфейса

Ответ

Стабильный тип интерфейса (Stable Type) в Android - это тип, который может быть безопасно использован в межпроцессном взаимодействии (IPC) и сохраняет свою стабильность между версиями приложения.

Основные характеристики:

  1. Гарантированно сохраняет структуру при обновлениях
  2. Может быть сериализован/десериализован
  3. Подходит для передачи между процессами (AIDL, Intent, SavedState)

Пример стабильного интерфейса:

@Stable
interface StableApi {
    fun getData(): ParcelableData
}

@Parcelize
data class ParcelableData(val id: Int) : Parcelable

Нестабильные типы (например, содержащие callback'и или несериализуемые объекты) могут вызывать проблемы при передаче между компонентами.

Ответ 18+ 🔞

А, ну это про стабильные типы в андроиде, ебать мои старые костыли! Слушай, тут всё просто, как три копейки, но если накосячить — будет тебе хиросима и нигерсраки, честно.

Представь, что твой интерфейс — это такой вот посыльный между разными комнатами-процессами в приложении. И вот ты его обновил, апдейт выпустил. А этот посыльный, сука, взял и форму сменил, или карманы отрезал. Как он теперь между комнатами ходить будет? Его же не узнают! Вот для этого и нужны эти самые @Stable типы. Это такие крепкие, надёжные мужики, которые не меняются от версии к версии. Гарантированно. С ними доверия — ебать ноль, потому что оно стопроцентное.

Основные их фишки, ёпта:

  1. Структура у них железобетонная. Что в первой версии было, то и в десятой останется. Никаких сюрпризов.
  2. Их можно спокойно упаковать в коробку (сериализовать) и распаковать в другом месте (десериализовать). Не развалятся по дороге.
  3. Их можно без страха слать куда угодно: через AIDL, в Intent'ы, в сохранённое состояние. Они как послы — везде пройдут.

Вот смотри, как такого красавца делают:

@Stable
interface StableApi {
    fun getData(): ParcelableData
}

@Parcelize
data class ParcelableData(val id: Int) : Parcelable

Видишь? Интерфейс помечен @Stable. И он возвращает данные, которые умеют себя упаковывать (Parcelable). Всё чинно, благородно. Передавай куда хочешь.

А теперь, чувак, смотри на грабли. Нестабильные типы — это пиздопроебибна полная. Сунул туда какую-нибудь хитрожопую callback-функцию или объект, который в парашах не умеет плавать. И всё, привет. Попробуй эту хрень между процессами переслать — оно просто сломается, накроется медным тазом. Процесс получит какую-то мудню, которую понять не сможет, и будет тебе краш вместо работы.

Так что правило простое: если штука должна путешествовать — делай её стабильной и сериализуемой. Не хочешь проблем — не выдумывай. Иначе сам от себя охуеешь, когда в проде всё посыпется.