Может ли стать причиной утечки памяти объявление SharedPreferences и SQLiteDatabase статическими?

145
30 октября 2018, 05:30

Я обычно в небольших приложениях объявляю SharedPreferences статическим, и SQLiteDatabase статическим, может ли это стать причиной утечки памяти? Или мне лучше в каждом нужном классе/фрагменте объявлять SharedPreferences или SQLiteDatabase, проделывать нужные операции и закрывать их с выходом?

Answer 1

Само объявление статичным экземпляры класса менеджера БД, или Shared, наоборот скорей всего избавит от лишних утечек, ну это если рассуждая что такое static. В целом дальше зависит от использования. Ликнуть Shared я даже не представляю как это возможно при static, а вот с БД действительно можно такое устроить причем как при записи, так и при чтении. Ну вот например если вы будете ставить курсор и не закрывать его, и то в это случае вы получите что-то типо Object Sqlite.* was leaked! Please fix your application to end transactions in progress properly and to close the database when it is no longer needed. Поэтому даже рассуждая так, можно сказать как в документации SQLite will never leak memory. This is true even in the face of memory allocation failures or other system errors. Вкратце в Sqlite нет мемори ликов, если вы даже сами накосячите. Но иногда можно встретить, такое

Leak found
Caused by: java.lang.IllegalStateException: SQLiteDatabase created and never closed 

Существует много подходов, как использовать БД Sqlite, но есть пару докладов, в которых рассказывается, что самый лучший способ для ANdroid это открыть при запуске (в Application классе) и закрывать при выходе. Иначе как бы вы не использовали коннекты к БД с разных конекстов, то ловите database is locked, синглтоном но можете словить attempt to re-open an already-closed object: SQLiteDatabase поэтому я бы советовал не заниматься преждевременной оптимизацией БД, особенно в маленьких приложениях. Сам static ужасен для структуры проекта, в любом случае лучше не использовать его.

READ ALSO
Получить верхний пиксель у изображения

Получить верхний пиксель у изображения

Возможно ли как-то получить верхний пиксель (верхнюю границу) у изображения?

153
Читабельность и грамотность кода

Читабельность и грамотность кода

Не знаю, можно ли выкладывать такие просьбы тут, но руку мне за это не отрежут

152
Практика для изучения Java? [закрыт]

Практика для изучения Java? [закрыт]

Неоднократно был задан данный вопрос, исследуя его я сделал очевидные выводы :

186
Работа точки входа в java

Работа точки входа в java

Доброго времени суток коллеги!

205