👆 Android 🟣Android 17: lock-free MessageQueue Очередь главного потока стала lock-free. Меньше UI-блокировок, стабильнее frame time и меньше dropped frames под нагрузкой. 🟣Background Activity Launch — новые ограничения В Android 17 BAL распространили на IntentSender. MODE_BACKGROUND_ACTIVITY_START_ALLOWED deprecated → переход на …ALLOW_IF_VISIBLE. Lint уже подсказывает проблемные места. 🟣Android Gradle Plugin 9.0 и R8 R8 агрессивнее оптимизирует Kotlin: -processkotlinnullchecks, компактнее sy...
Mobile VK Hub
Комьюнити от VK для мобильных разработчиков. Здесь всё о том, как создаются приложения для миллионов: от нативных подходов до кросс-платформы.
Графики
📊 Средний охват постов
📉 ERR % по дням
📋 Публикации по дням
📎 Типы контента
Лучшие публикации
10 из 10Сегодня в рубрике — Александр Жеребцов, тимлид Android команд в социальных сервисах ВКонтакте (Core Мессенджер и Уведомления). Поговорили о переходе с Windows Phone на Android, опыте в стартапах и карьере в VK. ▶️ От Windows Phone до Android Всё началось в БГТУ им. Шухова в Белгороде. На первых курсах я фанател от технологий Microsoft и писал на C#. На втором курсе стал Microsoft Student Partner — по сути, занимался деврелом, когда это ещё не было мейнстримом: рассказывал студентам про технологи...
Контракты функций — как помочь компилятору Kotlin умеет делать smart cast после проверки if (x != null). Но если вы вынесли проверку в отдельную функцию — все ломается: fun String?.isValid(): Boolean = this != null && this.isNotBlank() fun process(s: String?) { if (s.isValid()) { s.length // ошибка: s всё ещё String? } } Компилятор не знает, что isValid() == true гарантирует non-null. Контракты это исправляют: @OptIn(ExperimentalContracts::class) fun String?.isValid(): Boolean { contract { retur...
LLM уже стали частью повседневной разработки. Но следующий шаг — не ассистент в IDE, а язык, в который LLM встроена на уровне модели. Команда с участием Андрея Бреслава (соавтор Kotlin) представила альфу CodeSpeak — языка, где разработчик редактирует спецификацию, а реализация генерируется с упором на детерминированность и контроль. Идея: меньше императивного кода, больше формализованных описаний с возможностью конвертации существующей базы. Для мобильной разработки это может означать новый уров...
MainActor и изоляция данных в Swift Concurrency С приходом async/await в Swift появилась новая проблема: как гарантировать, что UI-код выполняется на главном потоке? Раньше писали DispatchQueue.main.async, теперь есть @MainActor. Разбираемся, как работает изоляция и когда её применять. #mobilevk #mainactor #swiftconcurrency #asyncawait
StateFlow и SharedFlow — когда что использовать Оба горячие, оба из coroutines и оба собираются из UI. Но путаница между ними стоит багов. StateFlow — это состояние. У него всегда есть текущее значение, и новый подписчик получает его сразу при подписке. Хорошо для UI state: экран подписался — получил актуальные данные, не ждёт следующего emit. private val _uiState = MutableStateFlow<UiState>(UiState.Loading) val uiState: StateFlow<UiState> = _uiState.asStateFlow() SharedFlow — это события. Он ни...
Большинство знает Handler.post(), но мало кто понимает, что происходит внутри. А именно на этом механизме работают runOnUiThread(), View.post(), Glide, Jetpack Lifecycle и вообще весь UI-поток. #mobilevk #android #handlerpost
Обычный интерфейс в Java может реализовать кто угодно. Иногда это удобно. Но если набор вариантов должен быть закрыт, такая свобода уже мешает. Для этого в Java 17 добавили sealed interfaces: они позволяют заранее зафиксировать, какие типы могут реализовать интерфейс. #mobilevk #java #sealedinterfaces
Сегодня знакомимся с Константином Кулаковым, руководителем отдела iOS социальных сервисов ВКонтакте. Обсудили переход в мобильную разработку, принципы менеджмента и секреты продуктивности. ▶️ Войти в АйТи Мой путь в IT начался ещё в школе, лет в 12–13. Я контрибьютил в Open Source, разрабатывал на C++, делал маленькие игры. Затем я начал разрабатывать сайты в студии интернет-маркетинга. Занимался SEO, разработкой сайтов на WordPress, делал разнообразные интеграции. К нам часто приходили клиенты ...
expect/actual в KMP: где граница и почему её легко провести не там Kotlin Multiplatform делит код на общий (commonMain) и платформенный (androidMain, iosMain). Граница между ними — механизм expect/actual. В commonMain объявляешь expect-декларацию, в каждом платформенном модуле пишешь actual-реализацию. // commonMain expect fun currentTimeMillis(): Long // androidMain actual fun currentTimeMillis(): Long = System.currentTimeMillis() // iosMain actual fun currentTimeMillis(): Long = (NSDate().time...