2010-12-26 2 views
2

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

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

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

ответ

1

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

+0

Хорошо спасибо. Я, наконец, просто прошел идентификатор объекта и повторно запросил его из базы данных. Спасибо за полезную информацию. Грустно, что нет (стабильного) способа обойти указатель. –

1

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

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

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

Смежные вопросы