#Собес #android
🤔 При повороте экрана нужно сохранить и изменить определённые данные в Presenter без ViewModel. На каком этапе жизненного цикла и как это сделать?
При повороте экрана Activity уничтожается и создаётся заново. В MVP можно сохранить данные в
👉 Новости 👉 База вопросов
При повороте экрана Activity уничтожается и создаётся заново. В MVP можно сохранить данные в
onSaveInstanceState(Bundle) Presenter-a через Bundle (через интерфейс Activity → Presenter) и восстановить в onCreate нового View, передав сохранившийся Bundle . Либо хранить Presenter с данными в setRetainInstance(true) y Fragment.Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
#полезное
😵💫 Развеиваем мифы о Stability в Compose: оптимизации Strong Skipping
Ещё про Compose. Интересная статья, в которой автор рассказывает, как лямбды и strong skipping режим влияют на работу компилятора и на рекомпозицию.
Выводы и рекомендации от автора
🟠 Compose стал более агрессивно оптимизировать пропуск Composable функций, когда параметры не изменились.
🟠 Акцент в отдладке Compose сдвигается от метрик и отчетов к отладке на основе LayoutInspector и других инструментов, потому что метрики и отчеты говорят слишком мало о реальной производительности компонентов.
🟠 Чтобы обновить UI, используя нестабильные аргументы, нужно создать новый инстанс такого аргумента в памяти, и метод copy дата-классов для этого отлично подходит.
🟠 При работе с коллекциями для оптимизации рекомпозиций больше не нужно использовать Immutable Collections, однако придется обновлять их с созданием нового инстанса. Альтернатива использовать - SnapshotStateList.
🟠 При работе с лямбдами для максимальной производительности нужно захватывать только те объекты, которые действительно нужны: если нужно только одно поле класса, лучше прочитать поле в отдельную переменную и сослаться на нее.
Код экспериментов из статьи → ComposeStability
Читать
👉 Новости 👉 База вопросов
Ещё про Compose. Интересная статья, в которой автор рассказывает, как лямбды и strong skipping режим влияют на работу компилятора и на рекомпозицию.
Выводы и рекомендации от автора
Код экспериментов из статьи → ComposeStability
Читать
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1
Техническое собеседование. Лето 2024
Вопросы:
- Как бы вы реализовали чат в Android?
- Что произойдёт, если запрашивать атрибут PrimaryColor из ApplicationContext и из ActivityContext?
- За что отвечают колбэки onStart, onStop, onPause, onResume?
- Как обновить только один TextView в списке без полного ребинда всего элемента?
Все вопросы можно посмотреть на нашей платформе
#собес
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2❤1
#Собес #android
🤔 Есть четыре ViewModel, и нужно каждые 5 секунд подписываться на запрос из сети. Как это лучше организовать?
Лучше запускать единственный
👉 Новости 👉 База вопросов
Лучше запускать единственный
Flow ИЛИ LiveData в ОДНОм ViewModel, который внутри viewModelScope С помощью flow {} и delay(5000) эмитит результат каждые пять секунд. Остальные три ViewModel могут делегировать подписку на общий источник данных (SharedFlow или отдельный синглтон-репозиторий), чтобы не создавать дубли НТ ТР-запросов и экономить ресурсы.Please open Telegram to view this post
VIEW IN TELEGRAM
🔥2❤1
#полезное
📞 Anvil — плагин для компилятора Kotlin, облегчающий внедрение зависимостей с помощью Dagger 2
Anvil упрощает внедрение зависимостей в Dagger за счет автоматического объединения модулей Dagger и интерфейсов компонентов. В общем, вместо того чтобы вручную добавлять модули в компонент Dagger и заставлять компонент Dagger расширять все интерфейсы компонента, эти модули и интерфейсы могут быть включены в компонент автоматически, типо того:
Гитхаб
👉 Новости 👉 База вопросов
Anvil упрощает внедрение зависимостей в Dagger за счет автоматического объединения модулей Dagger и интерфейсов компонентов. В общем, вместо того чтобы вручную добавлять модули в компонент Dagger и заставлять компонент Dagger расширять все интерфейсы компонента, эти модули и интерфейсы могут быть включены в компонент автоматически, типо того:
@Module
@ContributesTo(AppScope::class)
class DaggerModule { .. }
@ContributesTo(AppScope::class)
interface ComponentInterface {
fun getSomething(): Something
fun injectActivity(activity: MyActivity)
}
// The real Dagger component.
@MergeComponent(AppScope::class)
interface AppComponent
Гитхаб
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1👍1
#полезное
❤️🔥 Vico — создание диаграмм и графиков на Kotlin
Vico — это легкая расширяемая библиотека Kotlin для создания диаграмм.
Библиотека совместима как с Jetpack Compose, так и с системой представлений, при этом 2 её основных модуля — compose и views, — являются независимыми.
GitHub
Wiki
👉 Новости 👉 База вопросов
dependencies {
implementation(libs.vico.compose)
implementation(libs.vico.compose.m2)
implementation(libs.vico.compose.m3)
implementation(libs.vico.core)
implementation(libs.vico.views)
}Vico — это легкая расширяемая библиотека Kotlin для создания диаграмм.
Библиотека совместима как с Jetpack Compose, так и с системой представлений, при этом 2 её основных модуля — compose и views, — являются независимыми.
GitHub
Wiki
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥1
#полезное
👋 Apollo Kotlin — типизированный GraphQL-клиент, который генерирует Kotlin-модели на основе ваших GraphQL-запросов. Этот инструмент избавляет от ручного парсинга JSON и работы с сырыми мапами данных, превращая ответы сервера в удобные типизированные объекты.
Инструмент поддерживает мультиплатформенный Kotlin, что позволяет использовать его не только в Android-приложениях, но и в других Kotlin-проектах. Автоматическая генерация моделей гарантирует, что вы сможете обращаться только к тем полям, которые явно запросили в GraphQL-операции.
Гитхаб
👉 Новости 👉 База вопросов
Инструмент поддерживает мультиплатформенный Kotlin, что позволяет использовать его не только в Android-приложениях, но и в других Kotlin-проектах. Автоматическая генерация моделей гарантирует, что вы сможете обращаться только к тем полям, которые явно запросили в GraphQL-операции.
Гитхаб
Please open Telegram to view this post
VIEW IN TELEGRAM
❤1🔥1
#Собес #android
🤔 Расскажите об основных компонентах Android-приложения.
B Android-приложении есть четыре ключевых компонента: Activity (экран UI), Service (фоновая работа), BroadcastReceiver (приём широковещательных сообщений) и ContentProvider (доступ к данным). Каждый компонент обьявляется в манифесте и управляется системой. Они взаимодействуют через Intent, что даёт гибкость в навигации и общении внутри и между приложениями.
👉 Новости 👉 База вопросов
B Android-приложении есть четыре ключевых компонента: Activity (экран UI), Service (фоновая работа), BroadcastReceiver (приём широковещательных сообщений) и ContentProvider (доступ к данным). Каждый компонент обьявляется в манифесте и управляется системой. Они взаимодействуют через Intent, что даёт гибкость в навигации и общении внутри и между приложениями.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3
#полезное
😘 Inspektify — написанная на Kotlin библиотека для Android и iOS. Она позволяет вам наблюдать за сетью вашего приложения в режиме реального времени прямо на вашем мобильном устройстве
Эту библиотеку можно использовать только в проектах, использующих Ktor для сетевой коммуникации
Github
👉 Новости 👉 База вопросов
Эту библиотеку можно использовать только в проектах, использующих Ktor для сетевой коммуникации
Github
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
#полезное
😎 Kotlin Serialization — официальная библиотека JetBrains для сериализации без рефлексии. Поддерживает JSON, Protobuf, CBOR и другие форматы, работая на всех платформах Kotlin: JVM, JS и Native.
Проект использует аннотации
GitHub
👉 Новости 👉 База вопросов
Проект использует аннотации
@Serializable для генерации кода сериализации на этапе компиляции, что делает его быстрым и безопасным. Интеграция с Gradle, Maven и Bazel упрощает подключение в любом проекте. GitHub
Please open Telegram to view this post
VIEW IN TELEGRAM
❤3
#полезное
🤓 Как самому зашифровать SharedPreferences
Вы наверняка знаете, что решение от Google в виде EncryptedSharedPreferences уже давно Deprecated, а какой-то адекватной замены им так и не появилось. И что делать, если безопасники отказываются принимать оговорку, что префы может читать только само приложение, если на устройстве нет рута?
Остается только написать свое решение и, на самом деле, сделать это не сильно сложно. Для этого нам понадобится AndroidKeystore и Tink — open-source решение от Google для работы с криптографией, которое очень удобно в использовании.
Алгоритм получается следующий:
1. В AndroidKeystore создаем новый ключ, если его еще нет
2. В Tink генерируем KeysetHandle
3. На основе этих данных создаем encryptedKeyset средствами Tink и сохраняем его в SharedPreferences
4. Затем из keysetHandle достаем примитив AEAD, с помощью которого уже будем шифровать данные
5. PROFIT
В этой реализации главное учесть два момента:
🟠 Обязательно удалять ключ из AndroidKeystore при очистке префов
🟠 Разработать стратегию на случай, если encryptedKeyset в префах или ключа в Keystore не оказалось, иначе вы не сможете расшифровать ваши данные!
👉 Новости 👉 База вопросов
Вы наверняка знаете, что решение от Google в виде EncryptedSharedPreferences уже давно Deprecated, а какой-то адекватной замены им так и не появилось. И что делать, если безопасники отказываются принимать оговорку, что префы может читать только само приложение, если на устройстве нет рута?
Остается только написать свое решение и, на самом деле, сделать это не сильно сложно. Для этого нам понадобится AndroidKeystore и Tink — open-source решение от Google для работы с криптографией, которое очень удобно в использовании.
Алгоритм получается следующий:
1. В AndroidKeystore создаем новый ключ, если его еще нет
2. В Tink генерируем KeysetHandle
3. На основе этих данных создаем encryptedKeyset средствами Tink и сохраняем его в SharedPreferences
4. Затем из keysetHandle достаем примитив AEAD, с помощью которого уже будем шифровать данные
5. PROFIT
В этой реализации главное учесть два момента:
Please open Telegram to view this post
VIEW IN TELEGRAM
Техническое собеседование. Осень 2024. Просил 300-350к. Опыт в резюме 5 лет. Было много вопросов, которые основаны на реальных кейсах.
Вопросы:
- Что такое «зомби-процессы» и как они соотносятся с потоками (threads)?
- В чём разница между Flow и LiveData, как ту же логику организовать?
- Как работают методы bind и unbind y Android-сервисов?
- Какие проблемы могут возникнуть при перехвате Intent через BroadcastReceiver?
Все вопросы можно посмотреть на нашей платформе
#собес
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥3❤1👍1
Forwarded from IT crew | Антон Гуляев 🤖
Исследование рынка вакансий IT 📈
Я проверил рынок на 4 резюме: 1-я неделя открытые резюме, 2-я неделя 100 откликов.
В A/B тестировании я проверял максимальный возраст, университет, опыт работы и пол.
Важные инсайды для резюме:
1️⃣Аутсорсы с высшим IT образованием конвертят в 2 раза больше (8 vs 4 приглашений)
2️⃣Возраст 40+ - все еще в строю, особенно, если сильное резюме на 3 года опыта (7 приглашений)
3️⃣Вышка, продуктовая разработка 4 года и Москва - конверсия 8,6%
Я проведу еще более масштабное исследование, где станет понятно - какой он, идеальный кандидат для любой специальности. Пока новый A/B тест насчитывает 26 резюме 🗿
👉 Перешли этот пост друзьям, а также реагируй и пиши в комментариях, если готов взять виртуальную симку и дать самому масштабному исследованию рынка жизнь.
Подпишись, чтобы не пропустить 🚀
IT Crew | Антон Гуляев
Я проверил рынок на 4 резюме: 1-я неделя открытые резюме, 2-я неделя 100 откликов.
В A/B тестировании я проверял максимальный возраст, университет, опыт работы и пол.
Важные инсайды для резюме:
2️⃣Возраст 40+ - все еще в строю, особенно, если сильное резюме на 3 года опыта (7 приглашений)
3️⃣Вышка, продуктовая разработка 4 года и Москва - конверсия 8,6%
Я проведу еще более масштабное исследование, где станет понятно - какой он, идеальный кандидат для любой специальности. Пока новый A/B тест насчитывает 26 резюме 🗿
Нужна твоя помощь. Аккаунт в tg, аккаунт известной площадке по поиску работы.
👉 Перешли этот пост друзьям, а также реагируй и пиши в комментариях, если готов взять виртуальную симку и дать самому масштабному исследованию рынка жизнь.
Подпишись, чтобы не пропустить 🚀
IT Crew | Антон Гуляев
👍3🔥3❤2
#Собес #android
🤔 Как работают дженерики в Kotlin «под капотом»?
Kotlin-дженерики реализованы через стирание типов (type erasure) на JVM, аналогично Java: информация о конкретном параметре типа недоступна в рантайме. Компилятор проверяет типы во время компиляции, а затем генерирует код без параметризации. Для сохранения информации о типе используют реифицированные (
👉 Новости 👉 База вопросов
Kotlin-дженерики реализованы через стирание типов (type erasure) на JVM, аналогично Java: информация о конкретном параметре типа недоступна в рантайме. Компилятор проверяет типы во время компиляции, а затем генерирует код без параметризации. Для сохранения информации о типе используют реифицированные (
reified) параметры в inline -функциях.Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
#полезное
🥄 Creating an Engaging Progress Button in Jetpack Compose
Гайд по реализации вот такой кнопки с прогрессом на Jetpack Compose.
Исходный код → ProgressButton
Читать
👉 Новости 👉 База вопросов
Гайд по реализации вот такой кнопки с прогрессом на Jetpack Compose.
Исходный код → ProgressButton
Читать
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2
#Собес #git
🤔 Что такое команды git reset -mixed и git merge - abort?
👉 Новости 👉 База вопросов
git reset --mixed : отменяет изменения, которые были добавлены в индекс, но сохраняет изменения в рабочем каталоге.git merge --abort : отменяет слияние, которое в данный момент находится в процессе, и возвращает репозиторий в состояние до начала слияния.Please open Telegram to view this post
VIEW IN TELEGRAM
YeaHub
YeaHub — тренажер собеседований по IT
5000+ вопросов для подготовки к интервью. Фильтры, квизы, статистика!
❤1
#полезное
😬 Шаблон приложения Kotlin Multiplatform
Базовый шаблон приложения Kotlin Multiplatform для Android и iOS. Он включает общую бизнес-логику и обработку данных, а также реализацию общего пользовательского интерфейса с использованием Compose Multiplatform
Гитхаб
👉 Новости 👉 База вопросов
Базовый шаблон приложения Kotlin Multiplatform для Android и iOS. Он включает общую бизнес-логику и обработку данных, а также реализацию общего пользовательского интерфейса с использованием Compose Multiplatform
Гитхаб
Please open Telegram to view this post
VIEW IN TELEGRAM
❤2