Меня особенно интересует следующее предложение из официального FAQ по Android .
Хэш-карта слабых ссылок на объекты
Вы также можете использовать HashMap WeakReferences для объектов с длинными ключами. Когда действие хочет передать объект другому действию, оно просто помещает объект на карту и отправляет ключ (который является уникальным длинным, основанным на счетчике или отметке времени) получателю действия с помощью намерений. Операция получателя получает объект с помощью этого ключа.
Я не нашел способа, как правильно это реализовать. И я не уверен, почему WeakReferences здесь предпочтительнее, и почему бы не использовать жесткие ссылки.
Моя реализация (я хочу отправить экземпляр класса XY из действия A в службу B ):
получающая служба имеет статическую хэш-карту объектов.
public static HashMap<Long, Object> parameters = new HashMap<Long, Object>();
код для отправляющей части (мероприятие A)
long key = SystemClock.elapsedRealtime();
B.parameters.put(key, new XY());
Intent i = new Intent(this, B.class);
i.putExtra("PARAM_UPLOAD", key);
startService(i);
код для принимающей части (услуга B)
long key = intent.getLongExtra("PARAM_UPLOAD", -1);
XY data = (XY)parameters.get(key);
Код использует жесткие ссылки. Почему я должен использовать слабые ссылки здесь (как предложено в FAQ)? И такой шаблон использования для передачи данных нормально, или вы предпочитаете что-то еще.