Ответ
Стабильный тип интерфейса (Stable Type) в Android - это тип, который может быть безопасно использован в межпроцессном взаимодействии (IPC) и сохраняет свою стабильность между версиями приложения.
Основные характеристики:
- Гарантированно сохраняет структуру при обновлениях
- Может быть сериализован/десериализован
- Подходит для передачи между процессами (AIDL, Intent, SavedState)
Пример стабильного интерфейса:
@Stable
interface StableApi {
fun getData(): ParcelableData
}
@Parcelize
data class ParcelableData(val id: Int) : Parcelable
Нестабильные типы (например, содержащие callback'и или несериализуемые объекты) могут вызывать проблемы при передаче между компонентами.
Ответ 18+ 🔞
А, ну это про стабильные типы в андроиде, ебать мои старые костыли! Слушай, тут всё просто, как три копейки, но если накосячить — будет тебе хиросима и нигерсраки, честно.
Представь, что твой интерфейс — это такой вот посыльный между разными комнатами-процессами в приложении. И вот ты его обновил, апдейт выпустил. А этот посыльный, сука, взял и форму сменил, или карманы отрезал. Как он теперь между комнатами ходить будет? Его же не узнают! Вот для этого и нужны эти самые @Stable типы. Это такие крепкие, надёжные мужики, которые не меняются от версии к версии. Гарантированно. С ними доверия — ебать ноль, потому что оно стопроцентное.
Основные их фишки, ёпта:
- Структура у них железобетонная. Что в первой версии было, то и в десятой останется. Никаких сюрпризов.
- Их можно спокойно упаковать в коробку (сериализовать) и распаковать в другом месте (десериализовать). Не развалятся по дороге.
- Их можно без страха слать куда угодно: через AIDL, в Intent'ы, в сохранённое состояние. Они как послы — везде пройдут.
Вот смотри, как такого красавца делают:
@Stable
interface StableApi {
fun getData(): ParcelableData
}
@Parcelize
data class ParcelableData(val id: Int) : Parcelable
Видишь? Интерфейс помечен @Stable. И он возвращает данные, которые умеют себя упаковывать (Parcelable). Всё чинно, благородно. Передавай куда хочешь.
А теперь, чувак, смотри на грабли. Нестабильные типы — это пиздопроебибна полная. Сунул туда какую-нибудь хитрожопую callback-функцию или объект, который в парашах не умеет плавать. И всё, привет. Попробуй эту хрень между процессами переслать — оно просто сломается, накроется медным тазом. Процесс получит какую-то мудню, которую понять не сможет, и будет тебе краш вместо работы.
Так что правило простое: если штука должна путешествовать — делай её стабильной и сериализуемой. Не хочешь проблем — не выдумывай. Иначе сам от себя охуеешь, когда в проде всё посыпется.