2013-10-05 6 views
4

У меня есть фрагмент, который перечисляет «Семестры» следующим образом: он обращается к базе данных, генерирует массив, который затем преобразуется в представления через ListAdapter.
В этом фрагменте есть кнопка добавления, которая открывает новое действие, в котором пользователь может создать новый семестр, который также вставляется в базу данных в том же самом действии.Эффективность Parcelable vs Чтение из базы данных

После создания семестра я, очевидно, хотел бы показать его, когда пользователь вернется к списку.
Для этого у меня есть 2 варианта:

  • Послать созданный Семестр назад в качестве объекта для фрагмента. Проблема в том, что для меня требуется реализовать интерфейс Parcelable на большинстве моих классов, поскольку они вложены, что было бы очень утомительно.
  • Сделать список перечитанным семестра из базы данных и воссоздать представление с нуля.

Мой вопрос: какой путь был бы быстрее и эффективнее? Базы данных могут получать большие сверхурочные, но то же самое для объектов посылки, особенно когда они вложены, и есть List с пользовательских объектов и т. Д., Что делает это решение более критичным.

ответ

5

Посылки очень быстрые. Это, по сути, бинарные упакованные данные, и это действительно эффективная память и процессор.

Это, действительно, зависит от размера базы данных. Если он относительно небольшой (скажем, менее 100 строк, возвращенных в запросе списка), я бы просто запросил его в onStart или onRestart. Делает все намного проще и более последовательно. Если этот запрос займет заметное время при возврате в список, я отправил бы его в намерение.

Не оптимизируйте (например, сделав все возможным), не будучи уверенным, что доступ к базе данных является узким местом.

+0

В качестве альтернативы (это не очень хорошая идея, но она может быть надежной), вы можете использовать несериализующую шину событий, такую ​​как Otto, чтобы передать POJO из деятельности create обратно в список. – Delyan

+0

Спасибо. Это приложение в основном основано на пользовательском вводе, поэтому я не могу просмотреть, сколько строк будет иметь моя база данных. Но теперь, когда я думаю об этом, я не всегда ** нуждаюсь в вложенных объектах (например, мне не нужен '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' 'пользователя ''), поэтому Я мог бы просто установить их на «нуль» или что-то еще, и ускорить весь процесс еще больше. Кроме того, теперь, когда я думаю об этом, если «Parcel's» так быстр, они могут быть лучшим решением для меня, поскольку я бы хотел в какой-то момент перейти на онлайн-базу данных, что потребовало бы еще больше времени для запроса. – Asaf

+0

Не используйте Посылки в качестве постоянного хранилища. Их формат меняется между Android-верионами, поэтому обновление может стереть все данные ваших пользователей. Что касается онлайн-базы данных, попробуйте «синхронизировать» ее со всеми клиентами, если это вообще возможно. Пользователи ненавидят запросы онлайн-источников, так как это очень медленно при мобильном соединении. – Delyan