Каков наилучший способ обмена данными между действиями? - PullRequest
227 голосов
/ 02 февраля 2011

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

GlobalState gs = (GlobalState) getApplication();
String s = gs.getTestMe();

Однако я хочу поделиться множеством переменных, некоторые из которых могут быть довольно большими, поэтому я не хочу создавать их копии, как указано выше.1004 *

Есть ли способ напрямую получить и изменить переменные без использования методов get и set?Я помню, как читал статью на сайте разработчиков Google, в которой говорилось, что это не рекомендуется для производительности на Android.

Ответы [ 14 ]

1 голос
/ 02 февраля 2011

Если вы намерены вызывать другие действия из текущего действия, вы должны использовать Intents .Вы можете сосредоточиться не столько на сохранении данных, сколько на совместном использовании по мере необходимости.

Однако, если вам действительно нужно сохранить эти значения, вы можете сохранить их в каком-либо структурированном текстовом файле или базе данных налокальное хранилище.Файл свойств, файл XML или файл JSON могут хранить ваши данные и могут быть легко проанализированы при создании активности.Не забывайте также, что у вас есть SQLite на всех устройствах Android, чтобы вы могли хранить их в таблице базы данных.Вы также можете использовать Map для хранения пар ключ-значение и сериализации карты в локальное хранилище, но это может быть слишком громоздким, чтобы быть полезным для простых структур данных.

1 голос
/ 02 февраля 2011

Предполагая, что вы вызываете занятие два из занятия одно, используя Intent.
Вы можете передавать данные с помощью intent.putExtra (),

. Примите это для справки. Отправка массивов с Intent.putExtra

Надеюсь, это то, что вы хотите.

1 голос
/ 02 февраля 2011

Ну, у меня есть несколько идей, но я не знаю, являются ли они тем, что вы ищете.

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

Или упакуйте ваши данные в сериализуемый или пакетный и прикрепите их к пакету и передайте пакет между действиями.

Это может быть совсем не то, что вы ищете,но вы также можете попробовать использовать SharedPreferences или предпочтение в целом.

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

0 голосов
/ 18 июля 2017

И если вы хотите работать с объектом данных, эти две реализации очень важны:

Сериализуемый против Parcelable

  • Serializable - интерфейс маркера, который подразумевает, что пользователь не может упорядочить данные в соответствии со своими требованиями Поэтому, когда объект реализует Serializable, Java автоматически сериализует его.
  • Parcelable - собственный протокол сериализации для Android. В Parcelable разработчики пишут собственный код для маршалинга и демаршалинга. Таким образом, он создает меньше мусорных объектов по сравнению с сериализацией
  • Производительность Parcelable очень высока по сравнению с Serializable из-за его пользовательской реализации Настоятельно рекомендуется использовать Parcelable Implantation при сериализации объектов в Android.

public class User implements Parcelable

проверить больше в здесь

...