Сделайте приложение с защитой от сбоев
«Маленькая течь потопит большой корабль» — Бенджамин Франклин
Как разработчик Android, наш главный девиз — создать приложение, которое не дает сбоев и хорошо работает в любых ситуациях. Для этого нам нужно позаботиться об утечках памяти. Поскольку утечка памяти приводит к OutOfMemoryError
сбоям и ухудшает производительность приложения.
Во-первых, мы узнаем, что такое утечка памяти. Согласно Википедии
В информатике утечка памяти — это тип утечки ресурсов, который происходит, когда компьютерная программа неправильно управляет распределением памяти [1] таким образом, что память, которая больше не нужно не выпускают.
Проще говоря, есть память, которую нужно было освободить, но она не освободилась.
Как найти утечку памяти
LeakCanary — наиболее часто используемая библиотека в Android для поиска утечек памяти. Установка довольно проста. Нам просто нужно использовать зависимость на уровнях приложения build.gradle
.
debugImplementation 'com.squareup.leakcanary:leakcanary-android:2.8.1'
Мы используем debugImplementation
, потому что проверка утечки памяти должна выполняться только в отладочной сборке. Теперь, если вы запустите приложение, вы получите уведомление, если в вашем приложении есть какие-либо утечки памяти.
LeakCanary в действии
Я использую этот репозиторий GitHub. Не стесняйтесь проверить это. После установки LeakCanary при создании приложения я получил уведомление.
Он говорит мне, что в моем приложении есть утечка памяти. После нажатия на уведомление оно показывает мне причину ошибки.
По сути, это говорит мне, что в ImageSearchFragment
есть утечка памяти. Потому что есть представление, которое следует очистить, чтобы предотвратить утечку памяти. Причина этого в том, что я использовал databindig
со ссылкой на ConstrainLayout
в ImageSearchFragment
, но не удалял ссылки, вызывающие утечку памяти.
Эта причина особенно важна для этого проекта. Это может быть еще одной причиной утечек памяти в вашем проекте.
Как решить утечку памяти
Теперь я знаю причину утечки памяти в моем приложении, мне нужно решить эту проблему. Итак, я изменил ImageSearchFragment
.
Что я сделал, так это создал ссылку databinding
и удалил ее в onDestroyView
. Итак, я очистил память, которую нужно было очистить. Если я запущу приложение сейчас, то уведомления от LeakCanary не будет. Так что теперь в этом приложении нет утечки памяти. Приятно знать, что в вашем приложении нет утечки памяти. не так ли?
Это все на сегодня. Надеюсь, вы узнали что-то новое и полезное.
Ваше предложение важно для меня. Если у вас есть, поделитесь ими в комментариях. Пока мы не встретимся снова… Ура!
Want to Connect? If you want to, you can connect with me on Twitter or LinkedIn.