存储在android服务中的Bundle键/值在Message中消失

时间:2012-11-15 17:18:24

标签: android

我的活动将应用程序周围的Handler共享给服务中的工作线程。线程使用处理程序sendMessage()Acitivity使用handleMessage()来处理它们

活动进入后台Android杀死它,当它返回时它再次启动。

Activity调用Service的静态方法来检查服务中线程的最后状态(关于最后一个sendMessage()是什么)。这样它就可以根据服务线程的最后一条消息启动其UI状态

Message m = SyncService.lastSyncMessage();

由于某种原因,消息m中的包有时是有效的(包含键/值对),有时键/值不存在

线程一侧的代码通过处理程序将消息转发给UI,如下所示。

  Handler uiHandler = UIGlobals.getHandler();
  Message msg = uiHandler.obtainMessage();
  Bundle msgBundle = new Bundle();

  msgBundle.putInt("status", syncEv.status.ordinal());
  msgBundle.putString("param", syncEv.param);

  msg.setData(msgBundle);
  if(uiHandler.sendMessage(msg))
  {
    lastMessage = msg;
  }

服务中的静态方法

   public static Message lastSyncMessage()
{
    return lastMessage;
}

1 个答案:

答案 0 :(得分:0)

Message对象来自池。当Activity消失时,处理程序的回调指向不可用的对象。 Android似乎重新准备Message ref以便在Pool中使用, 为了解决这个问题,我将实际事件存储在静态成员而不是消息中。