【问题标题】:Bundle keys/values stored in android service disappear in Message存储在 android 服务中的捆绑键/值在消息中消失
【发布时间】:2012-11-15 17:18:24
【问题描述】:

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

Activity 进入后台,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;
}

【问题讨论】:

    标签: android


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-07
      • 1970-01-01
      • 1970-01-01
      • 2019-08-18
      • 1970-01-01
      • 1970-01-01
      • 2019-03-30
      • 1970-01-01
      相关资源
      最近更新 更多