2014-01-03 3 views
1

У меня есть деятельность, которая привязывается к 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 убит.

Есть ли способ сохранить Посланника живым или лучший подход, чем то, что я использую в настоящее время?

Заранее благодарим за любую помощь!

+0

Почему 'Messenger' получение GC'd при запуске' ListViewActivity'? Разве вы не держите ссылку на этот объект где-то? Это звучит не так. –

+0

@DavidWasser Поскольку 'ListViewActivity' является новой' Activity', я предполагаю? Если у него нет сообщений в очереди, и запускается новая 'Activity', я предполагаю, что VM говорит, что мы закончили с этим распределением ...? – nathansizemore

+0

Где вы храните ссылки на 'Messenger'? В какой деятельности? –

ответ

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