Передача данных непримитивного типа между действиями в Android - PullRequest
23 голосов
/ 18 сентября 2009

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

Ответы [ 2 ]

57 голосов
/ 18 сентября 2009

У вас есть несколько вариантов:

  1. Вы можете обернуть более сложную структуру в классе, который реализует интерфейс Parcelable, который может быть сохранен в дополнительном
  2. Вы можете обернуть более сложную структуру в классе, который реализует интерфейс Serializable, который может быть сохранен в дополнительном
  3. Вы используете элементы статических данных для передачи содержимого, поскольку все они находятся в одном процессе
  4. Вы используете внешнее хранилище (файл, база данных, SharedPreferences)
  5. Как отметил человек, который только что опубликовал сообщение, используйте общий компонент, такой как пользовательский Application или локальный Service

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

2 голосов
/ 18 сентября 2009

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

Я также слышал об использовании Google Protocol Buffer для достижения более эффективного решения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...