Раньше я встречал некоторые проблемы. Я решил это безобразно, я думаю, вы можете взять это как ссылку.
Я помещаю Map
в глобальный одноэлементный объект, ключ Map
равен String
, Map
сохранит объект, который я хочу передать в Intent
, вместо помещения объекта в Intent
, я положил ключ String
в Intent
. В Activity
(или Службе ...), куда было передано намерение, я получаю ключ от Intent
, а затем получаю объект, который мне действительно нужен, от Mao
.
Может быть, этого недостаточно, вот псевдокод:
public void sendIntent() {
Object data; // the object you want to pass through Intent
Map<String, Object> globalMap = getMyGlobalMap();
String uid = UUID.randomUUID().toString();
globalMap.put(uid, data);
intent.putExtra(EXTRA_OBJECT_UID, uid);
}
public void receiveIntent() {
String uid = intent.getStringExtra(EXTRA_OBJECT_UID);
Object data = getMyGlobalMap().get(uid); // Here is your data object.
}
Обратите внимание, что, поскольку вы помещаете глобальную карту в одноэлементный объект, вы можете удалить объект из Map
, когда закончите с ним, поскольку карта будет существовать до тех пор, пока ваше приложение работает, вы можете не хочу оставлять какие-то бесполезные предметы и позволять им забирать вашу драгоценную память.
Обновление
Еще одна очень важная вещь: компонент, который отправляет Intent, и компонент, который получит Intent, должны находиться в одном процессе, только классы в одном и том же процессе могут совместно использовать данные в куче.