存储在 android 服务中的捆绑键/值在消息中消失



My 活动将应用周围的处理程序共享给服务中的工作线程。线程使用处理程序来发送消息() 活动性使用 handleMessage() 来处理它们

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

活动调用服务的静态方法来检查服务中线程的最后一个状态(关于最后一个 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;
}

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

最新更新