У меня есть деятельность, которая привязывается к Service
и общается через Messenger
s и Handler
s. Когда пользователь нажимает на элемент меню, он добавляет новый Activity, где они могут выбрать что-то из ExpandableListView
. После того, как был сделан выбор, я звоню finish()
по этой Деятельности и возвращается номер MainActivity
. MainActivity
остается связанным во время процесса, потому что я вызываю свой unbind в его onDestroy()
. Я теряю свой Service
для клиента, входящего Handler
. Это Messenger
я создал так:Сохранение сообщений между сервисом и действиями Android
//Target to allow service to send message to InccomingHandler
final Messenger serviceIncomingHandler = new Messenger(new MessageHandler(this));
/**
* Message Handling from Service
*/
private static class MessageHandler extends Handler {
private final WeakReference<RoomListActivity> mTarget;
public MessageHandler(RoomListActivity target) {
mTarget = new WeakReference<RoomListActivity>(target);
}
@Override
public void handleMessage(Message msg) {
RoomListActivity target = mTarget.get();
switch (msg.what) {
//Fancy stuff here...
}
}
}
зарегистрировать Клиент Messenger
с Service
, отправив Service
на Message
объект с msg.replyTo = serviceIncomingHandler;
На Service
стороны, я публикую, что в качестве Messenger
использовать для Клиента.
я увидел что-то, где была использована очередь сообщений, но если добавить дополнительные методы к моему MessageHandler
классу, я потеряю возможность создать Messenger
от него, и я понятия не имею, как зарегистрировать Клиент Incoming Handler
к Service
, не отправив Message
в Service
и установив поле msg.replyTo
.
Проблема: Messenger
получает GC'd, когда начинается ExpandableListView Activity
. Мне нужно это, чтобы остаться в живых, потому что сообщения чата отправляются туда и обратно, и я хотел бы сохранить историю сообщений чата для повторного заполнения оригинала ListView
. История все еще находится в массиве, когда активность возобновляется, но я не могу хранить сообщения, которые отправляются, а ExpandableListView Activity
- это передний план, потому что мой Messenger убит.
Есть ли способ сохранить Посланника живым или лучший подход, чем то, что я использую в настоящее время?
Заранее благодарим за любую помощь!
Почему 'Messenger' получение GC'd при запуске' ListViewActivity'? Разве вы не держите ссылку на этот объект где-то? Это звучит не так. –
@DavidWasser Поскольку 'ListViewActivity' является новой' Activity', я предполагаю? Если у него нет сообщений в очереди, и запускается новая 'Activity', я предполагаю, что VM говорит, что мы закончили с этим распределением ...? – nathansizemore
Где вы храните ссылки на 'Messenger'? В какой деятельности? –