Сделайте приложение с защитой от сбоев

«Маленькая течь потопит большой корабль» — Бенджамин Франклин

Как разработчик 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.