- Использование
AsyncTask для долгих операций (лучше использовать Kotlin Coroutines или RxJava).
- Передача View/Context в ViewModel (вызывает утечки памяти).
- Наследование от
Activity или Fragment напрямую для базовой логики (лучше использовать композицию).
- Жесткое кодирование строк, чисел, цветов вместо использования ресурсов.
- Блокировка основного потока (
MainThread) с помощью долгих синхронных операций.
- Использование статических переменных для хранения данных, требующих жизненного цикла.
- Чрезмерное использование вложенных Layouts, что приводит к проблемам с производительностью (
ConstraintLayout или LinearLayout с weight лучше).
- Отсутствие обработки конфигурационных изменений (повороты экрана, смена локали).
- Прямой доступ к базам данных или сетевым операциям из UI-потока.
- Неправильное использование
SharedPreferences для хранения больших объектов или конфиденциальных данных.
- Отсутствие обработки исключений или ее неправильная реализация (например, пустые блоки
catch).
- Использование неявных интентов без проверки наличия подходящих активити (
resolveActivity).
- Неправильное управление подписками (например, в RxJava), что приводит к утечкам.
Пример избыточного вложения Layouts:
xml