Blog about Android

  • Сервисы. Что такое, для чего нужны, какие бывают?

    Сервисы (Service) — это компоненты Android-приложения, которые выполняют долгосрочные операции в фоновом режиме и не имеют пользовательского интерфейса. Они используются для выполнения задач, которые должны продолжаться, даже если пользователь не взаимодействует с приложением. Для чего нужны? Сервисы нужны для выполнения фоновых операций, таких как: Виды сервисов:

  • Жизненный цикл Activity. Какой порядок вызова методов жизненного цикла для двух Activity?

    Ответ: Жизненный цикл Activity состоит из следующих основных методов: Порядок вызова методов жизненного цикла для двух Activity Предположим, есть Activity A и Activity B. Когда вы переходите от Activity A к Activity B, порядок вызова методов будет таким: Если Activity B завершена и возвращается к Activity A:

  • Отличия жизненного цикла Fragment-a от жизненного цикла Activity

    Ответ: Fragment имеет дополнительные методы жизненного цикла:

  • Расскажи про основные компоненты Android приложения

    Ответ: Ключевые компоненты Android-приложения: Activity: Компонент, отвечающий за взаимодействие с пользователем через экранный интерфейс. Service: Фоновый компонент, выполняющий задачи без прямого взаимодействия с пользователем, такие как загрузка данных или воспроизведение музыки. BroadcastReceiver: Обрабатывает широковещательные сообщения от системы или других приложений, например, уведомления об изменениях сети или батареи. ContentProvider: Управляет доступом к структурированным данным и предоставляет…

  • Можно ли сделать приложение например только с BroadcastReciever-ом? Или только с ContentProvider-ом?

    Ответы: Да, в Android можно создать приложение, содержащее только один компонент — BroadcastReceiver. Такое приложение будет реагировать на определённые широковещательные сигналы, такие как системные события или сообщения от других приложений. Да, в Android можно создать приложение, которое будет состоять только из одного компонента — ContentProvider. Такое приложение не будет иметь интерфейса и будет предназначено для…

  • Что такое object? Потокобезопасен ли он? Какие еще есть реализации синглтона?

    Ответы: Что такое object? object — это ключевое слово в Kotlin, которое используется для создания синглтона, то есть объекта, который существует в единственном экземпляре на протяжении всей программы. object также используется для создания анонимных объектов, например, при реализации интерфейсов на месте. object можно использовать для создания компаньон-объекта внутри класса. Компаньон-объект является аналогом статических членов в…

  • Можно использовать var поля в data class-е? Что будет, если использовать data class с var полем, например, в качестве ключа хэшмапы?

    Ответ: Можно, но не надо) Использование var в data class возможно, это не всегда хорошая идея, особенно в контексте использования этих объектов в качестве ключей в хэш-таблицах или других коллекциях, которые полагаются на неизменность объектов для правильной работы. Если свойства объекта могут изменяться, это может привести к неожиданным ошибкам, нарушению целостности данных и некорректному поведению…

  • Можно ли наследоваться от data class-а? Почему?

    Ответ: Нельзя. В Kotlin нельзя наследоваться от data class-а, и это связано с особенностями их проектирования и автоматической генерацией методов. Data class-ы автоматически генерируют методы equals(), hashCode(), toString() и copy(), которые зависят от свойств, объявленных в первичном конструкторе. Если бы наследование от Data class-а было разрешено, это могло бы привести к сложностям с поддержкой этих…

  • Можно ли на корутинах получить дедлок?

    Ответ: Да, можно. Если есть корутины, которые взаимозависимы от результатов друг друга и блокируют друг друга, то дедлок возможен. Как их избежать:

  • Участвуют ли в генерации методов data class поля из body? Можно ли выпилить из генерации поле из конструктора?

    Ответ: Нет. В Kotlin только свойства, объявленные в первичном конструкторе дата-класса, участвуют в генерации методов equals(), hashCode(), toString(), copy() и компонентных функций (component1(), component2() и т.д.). Свойства, объявленные в теле класса (body), не участвуют в этих автоматически сгенерированных методах. Таким образом, вы можете исключить поле из генерации методов, объявив его в теле класса, а не…