Что более эффективно? Статические данные, передача данных, общие настройки, база данных...?

Недавно я делал приложение в android, и в какой-то части у меня возникло сомнение в том, что это эффективный способ совместного использования данных. Как я могу объявить статическую переменную в одном классе и вызвать эту переменную из другого класса, используя Classname.Variablename, или я могу передать эти данные с моим намерением и получить данные от намерения другого класса, или я могу использовать общие настройки и получать данные из он или я мог бы даже хранить эти данные в базе данных и извлекать их из другого класса из базы данных. Каково было мое сомнение, каким будет наиболее эффективный способ сделать это (получить данные)? Поскольку приложения Android в конечном итоге предназначены для использования памяти в телефонах, и эффективность должна быть ограничением. Может ли кто-нибудь вести меня по правильному пути, это было бы очень полезно.

Ответы

Ответ 1

Мое мнение:

Каждый из них зависит от сценария. Позвольте мне объяснить.

Статическая переменная:

Статическая переменная является распространенным способом предоставления доступа ко всему контексту приложения. Если вы хотите сохранить несколько данных, которые не должны поддерживаться после выхода приложения, это лучший вариант.

Передача данных через Intent:

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

Общие настройки:

Общие настройки - это не что иное, как простая таблица с двумя столбцами. (ключ, значение).

преимущества:

  • Быстрый поиск
  • Легко понять и запрограммировать

минусы:

  • Поддержание ключей затруднено, если мы храним множество значений.
  • Пользователь может удалить это в любое время.

База данных:

Когда у нас есть много значений для хранения со сложной структурой, у нас остается только одно большое решение, т.е. DB.

<сильные > преимущества

  • Мы можем поддерживать структуру данных.
  • Android имеет приятные и простые API для обработки операций sqlite.

против

  • Операция немного медленная по сравнению с общими настройками.
  • пользователь может удалить это в любое время.

Итак, мы обнаружили, что основная проблема заключается в том, что мы не можем поддерживать постоянство хранилища, которое мы используем. Простое и эффективное решение - поддерживать онлайн-данные и синхронизировать их с мобильным db при каждом запуске приложения.

Ответ 2

Возможно, я ошибаюсь, но мне кажется, что я должен поделиться своими знаниями и опытом... ну, самый быстрый и простой способ - использовать статические... но я не буду рекомендовать это.

Мой выбор будет: База данных

Причины:

1 - Объявляя статическую переменную, она not reliable, как на каком-то этапе, когда ваши приложения или какое-либо другое приложение занимает слишком много памяти, GC попытается собрать все объекты unreference, static - хороший кандидат здесь... например, у Activity A есть статические переменные, и вы сейчас находитесь в Activity B, теперь gc удалит A и его объекты, есть шанс, что он также будет собирать статические. Теперь выбор базы данных здесь очевиден, мне не нужно рассказывать об этом, потому что в пределах cur curify активности вы всегда можете извлекать данные из базы данных.

2 - Объявляя статическую переменную, если ее просто тип int или small datatype, это не очень важно, но что, если вы собираетесь сохранить большой список сложных структур, тогда есть очень высокая вероятность того, что ваша деятельность будет leak memory, которая также даст вам неприятности. Нет утечки, если вы правильно используете базу данных.

SharedPreference/intent также хорош/быстр/полезен для памяти (я думаю), но может немного запутаться при передаче большой сложной структуры.

Итак, чтобы подвести итог, Если вы просто хотите передать небольшую структуру (string + int), и ваше приложение не касается границ кучи, тогда вы можете использовать static, но если вы выполняете интенсивные вызовы памяти и передавая несколько больших данных, тогда database надежный, может быть немного медленнее, чем статический, но достаточно быстрый, чтобы мы не заметили.

Надеюсь, что это поможет.

Ответ 3

В соответствии с моей точки зрения,

Это зависит от того, какие данные и насколько они важны. Вы можете использовать их следующим образом:

  • Static: при ограниченном использовании до запуска приложения.
  • SharedPreferenced: когда размер данных очень маленький, но важный для будущего использования.
  • Database: когда у вас большой размер данных.

Ответ 4

Не переходите на статические переменные. Когда вы вернетесь к активности, это будет null.

Подробнее см. этот ответ