【问题标题】:onCreateOptionsMenu not called consistently on Jelly BeanonCreateOptionsMenu 在 Jelly Bean 上的调用不一致
【发布时间】:2014-08-15 23:24:24
【问题描述】:

我遇到了某种可能的竞争条件。

我在我的活动中使用由 onCreateOptionsMenu() 创建的选项菜单。

直到最近它一直运行良好。

在 ICS (4.0.4) wifi 平板电脑上可以完美运行。我每次都得到选项菜单。 onCreateOptionsMenu() 在 onStart() 和 onCreate() 之后的最后一个 Fragment 的 onActivityCreated() 之后立即调用。

在 JB (4.2.2) 4g 手机(软件菜单按钮)上,只要 WiFi 处于活动状态,此功能就会失败。显示关闭 WiFi 菜单。打开WiFi没有菜单。在 onStart() 之后没有 onCreateOptionMenu() 被调用。

UDPATE: 经过大量测试,这不仅与wifi有关。我可以在 JB(4.2.2) 上多次启动应用程序,有时它会成功,有时它会调用 onCreateOptionsMenu() 失败。 作为一个很好的副作用,当您尝试多次启动应用程序时,在某些时候许可会弹出“应用程序未许可”错误,并且您会被卡住,直到您从 Google Play 商店应用程序中清除数据,有时不得不重启设备。好痛啊。

我什至尝试将 setHasOptionsMenu(true) 放在我的最后一个片段中,即使我没有更改片段中的选项菜单只是为了尝试强制执行会导致 onCreateOptionsMenu 被调用的 invalidateOptionsMenu 但全部没用。

肯定有一些竞争条件正在发生。但是日志什么也没显示。

如何强制 onCreateOptionsMenu() 被一致调用?

【问题讨论】:

  • 这很奇怪。这是什么设备?
  • 它是 Galaxy Nexus。
  • @androidin 你的 targetSdkVersion 是什么?
  • @androidin 你说的是软件菜单按钮...你是指在导航栏上,还是在操作栏上?
  • kcoppock 要求的是现代版本的 Android 中没有“选项菜单”。您使用操作栏,它碰巧仍然使用onCreateOptionsMenu() 以实现向后兼容。我们不知道“软件菜单按钮”是指操作栏溢出(操作栏中的“...”),“耻辱的旧菜单按钮”(导航栏中的“...”),还是别的东西。

标签: android android-activity


【解决方案1】:

好的,经过大量测试,这一切都归功于 In-App-Billing 的异步侦听器。 此侦听器有时会提前运行,有时会运行较晚。 侦听器中有代码修改了选项菜单上的项目。 如果侦听器运行得足够早,则选项菜单为空,并且在某些时候应用程序会崩溃。 为了解决这个问题,我确保在创建选项菜单之前不会调用侦听器。

【讨论】:

    猜你喜欢
    • 2014-06-25
    • 1970-01-01
    • 2017-09-28
    • 2016-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多