Я беру класс Android, в котором приложение использует Realm db, а для результата асинхронного запроса добавляется ChangeListener. Документация указывает, что слушатель должен быть добавлен в onStart и удален в onStop, чтобы память не просочилась, если экземпляр был уничтожен. Конфигурация db и экземпляр по умолчанию объявляются в классе, который расширяет Application - поэтому экземпляр Realm db по умолчанию будет сохраняться, но будет ли результат запроса? И если результат запроса не сохраняется, почему нужно удалить слушателя из результата, тогда как с помощью onClickListener (например), этот прослушиватель не нужно удалять?Realm db ChangeListener persistence - утечка памяти
ответ
Я не знаю, внутренностей Realm, но давайте использовать вычет =)
Применение одноэлементно (один экземпляр объекта, который будет жить до тех пор, как приложение).
Realm db instance as member будет жить с объектом приложения.
Абонент, например Activity, подписывается на результаты (шаблон наблюдателя - «эй, пинг меня, когда есть что-то для меня»). Когда действие добавляет себя в качестве слушателя, оно дает ссылку. Таким образом, сборщик мусора не может извлечь активность после изменения конфигурации (например, вращения устройства).
onStop - это обратный вызов, который указывает на возможное уничтожение Activity, поэтому он должен отказаться от подписки («не держите меня»).
зависит от цели. Если вы добавите RealmChangeListener
в RealmResults
, слушатель будет GCed после того, как Realm обнаружит, что RealmResults
GCed - Realm удерживает слабую ссылку на RealmResults
и проверяет слабый ref в какой-то момент. Если RealmChangeListener
добавлен к Realm
, он будет удален, если экземпляр Realm закрыт или вызывает removeChangeListener
/removeAllChangeListeners
. В этом случае, если вы держите экземпляр Realm в жизненном цикле приложения и не удаляете прослушиватели вручную, он будет просочиться.
В общем, было бы хорошей практикой удалить их, если они больше не нужны, чтобы не тратить ресурсы процессора/памяти.
- 1. IBM DB Persistence Model
- 2. Tomcat Утечка памяти
- 3. Утечка памяти Bitmap памяти
- 4. Android Realm: Из памяти
- 5. утечка памяти python, утечка кадров
- 6. утечка памяти с Alloc
- 7. Что такое db Realm?
- 8. Realm Android DB Filtering
- 9. Как инициализировать Realm DB
- 10. Как получить конкретные изменения от ChangeListener в Realm
- 11. Grails утечка памяти - ConcurrentHashMap
- 12. RealmObject changeListener
- 13. Отдельно pthread_create() утечка памяти
- 14. Утечка памяти в методе
- 15. MySQLdb - курсор - утечка памяти?
- 16. Утечка памяти графической памяти Core
- 17. Утечка памяти или фрагментация памяти?
- 18. Выделение памяти возможная утечка памяти
- 19. Утечка памяти улавливающих ячеек памяти
- 20. Утечка памяти и fork памяти
- 21. Утечка памяти без динамической памяти
- 22. Static DB Provider в ASP.NET MVC Причинение утечка памяти
- 23. UIGraphicsGetImageFromCurrentImageContext() - Утечка памяти
- 24. Android новая утечка памяти памяти/из памяти
- 25. Утечка памяти при запуске (или утечка памяти с помощью PowerShell)?
- 26. Утечка памяти в программе Node.js
- 27. Простая утечка памяти UITableView
- 28. Утечка памяти pthread_create
- 29. Утечка памяти - Сервис + нить
- 30. Утечка памяти: как решить
Вы можете определить GCed, пожалуйста? – JaeW
Мусор собрал. Пожалуйста, не обращайте внимания на предыдущий вопрос. – JaeW