Мелкая копия объекта в намерении в Android

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

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

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


person Leif Andersen    schedule 26.12.2010    source источник


Ответы (2)


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

person michaelg    schedule 27.12.2010
comment
Хорошо, спасибо. Наконец, я просто передал идентификатор объекта и повторно запросил его из базы данных. Тем не менее спасибо за полезную информацию. Печально, что нет (стабильного) способа обойти указатель. - person Leif Andersen; 27.12.2010

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

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

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

person JesusFreke    schedule 27.12.2010