Мелкая копия объекта в намерениях в Android - PullRequest
2 голосов
/ 27 декабря 2010

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

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

Так есть ли способ, которым я могу сделать поверхностную копию объекта в намерении, или любой другой способ передачи поверхностной копии данных в другое действие, как вы обычно передаете параметр в Java? Спасибо.

Ответы [ 2 ]

1 голос
/ 27 декабря 2010

JesusFreke правильно, что вы не можете передать ссылку (указатель) на объект через намерение. Под намерением подразумевается сериализованные данные, а не ссылка на эти данные. Тем не менее, я бы рекомендовал использовать метод статической карты, поскольку он часто является источником утечки памяти. Вместо этого я бы порекомендовал создать подкласс android.app.Application и использовать его для хранения ссылок на любые структуры данных, которые вам нужны для совместного использования в Activity.

1 голос
/ 27 декабря 2010

Когда вы отправляете намерение, намерение и все связанные с ним данные должны быть маршалированы через границы процесса. Единственный способ, которым это может произойти, - это если объект подлежит продаже.

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

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

...