Приложение на базе базы данных Android - ООП подход, вопросы сбора мусора - PullRequest
1 голос
/ 26 января 2012

Я делал свои первые шаги с андроидом, писал менеджер денег. Он хранит данные в базе данных SQLite, и мой подход был в основном процедурным, пока я его создавал.

Это означает: когда я создаю диаграмму или сводку, это выглядит так:

  1. Я создаю базу данных курсора
  2. Я перебираю этот курсор, чтобы собрать необходимые данные
  3. Я передаю данные непосредственно в нужный мне элемент (например, график или список)

Хорошо, это работает, но сейчас я учусь больше, и я хотел бы перестроить свое приложение. Я не полностью осознаю ограничения памяти на мобильных устройствах, поэтому я создаю эту тему.

Я придумал две идеи. Пожалуйста, скажи мне, какой из них ты считаешь лучше (или исправь мой подход как-нибудь, если он полностью неверен).

Давайте рассмотрим пример создания диаграммы или списка, как раньше. Теперь я бы сделал так:

  1. Я создаю базу данных курсора.
  2. Я создаю количество объектов, равное количеству записей, которые мне нужны для представления данных.
  3. Я использую созданные объекты для передачи данных в диаграмму или просмотр списка.

Это потребует больше кода, чем мой процедурный подход, но его использование должно быть намного проще, и код будет выглядеть более профессионально (поправьте меня, если я ошибаюсь) .

Однако я получил эту дилемму. Допустим, я создаю набор объектов на основе данных из таблицы «Расходы». Я использую их, чтобы представить диаграмму или список на одном из моих занятий. После того, как я закрываю занятие, они мне больше не нужны. Что я должен сделать, чтобы сборщик мусора выбросил их. Что-нибудь особенное? (да, я новичок в сборщике мусора).

Существует также второй подход, но я знаю, что это потребует много памяти, и я не уверен, что это хорошая идея. Итак, вернемся к примеру еще раз:

  1. Я создаю курсоры для каждой таблицы, которую я получил
  2. Я создаю набор объектов, соответствующих таблицам - в основном я передаю все таблицы в набор объектов для дальнейшего использования (я делаю это в потоке с некоторым индикатором выполнения при необходимости)
  3. Я использую созданные объекты в любое время, когда мне нужно представить свои данные.

Звучит глупо, а? Я не уверен, когда сборщик мусора удалит все эти объекты, и будет ли хорошей идеей спамить память таким количеством данных за один раз.

Спасибо за любые комментарии к этому.

1 Ответ

0 голосов
/ 22 апреля 2012

Оба решения работают, но первое лучше, потому что объекты помечаются для GC, как только они выходят из области видимости, что происходит намного раньше, чем если бы они были сохранены для последующего использования.Как только объекты собраны, их память становится доступной.

...