【问题标题】:Calling Google Play Services GoogleApiClient.connect() from Activity onStart() causes intermittent OpenGL crash (NvRmChannelSubmit errors etc.)从 Activity onStart() 调用 Google Play Services GoogleApiClient.connect() 会导致间歇性 OpenGL 崩溃(NvRmChannelSubmit 错误等)
【发布时间】:2014-06-27 21:40:06
【问题描述】:

我将我们的应用更新到 Google Play Services rev 17,这需要将我们应用的 3D 活动从 Activity 更改为 FragmentActivity。我们现在也比以前更早地调用 GoogleApiClient.connect(),因为 google 建议从 Activity 的 onStart() 调用 GoogleApiClient.connect()。

这导致了严重的倒退:现在,在 Nexus 7 启动时,新安装大约 30% 的时间会崩溃。崩溃日志 NvRmChannelSubmit: NvError_IoctlFailed 之后是无尽的其他 NvRmChannelSubmit 错误,我相信这只是表明 opengl 驱动程序状态混乱。

这是一个全新的错误,我们的应用程序没有任何变化,除了:

  • 活动从 Activity 更改为 android.support.v4.app.FragmentActivity
  • GPS 初始化 UI 现在更早触发,因为我们从 onStart() 调用 connect()
  • 更新到 GPS rev 17(有很多变化,但希望没有触及 opengl!)

我的一个理论是 GPS 连接 UI 和/或 FragmentActivity 的底层更改正在影响应用程序启动时的窗口并干扰 opengl 驱动程序初始化。但我没有证据证明这是原因,如果这是原因,我不知道如何解决。

有其他人看到与 GPS 连接 UI 流或 FragmentActivity 相关的 opengl 驱动程序问题吗?

【问题讨论】:

    标签: android opengl-es google-play-services android-fragmentactivity


    【解决方案1】:

    问题已解决。

    我确认 opengl 崩溃是由于在 opengl 初始化时从我们的 Activity 的 onStart() 方法调用 GoogleApiClient.connect() 引起的:如果我推迟对 connect() 的调用,直到第一个 OpenGL 帧被渲染之后,错误就得到了修复.

    结论:

    • Google 建议从 Activity onStart() 调用 connect(),但这对于 opengl 应用程序安全。如果 connect() 调用触发其他 GPS UI 流,例如,它会使运行 4.3 的 Nexus 7 上的 opengl 驱动程序崩溃用于用户帐户选择
    • 推迟 connect() 调用对我们来说是一种直接的解决方法,但要小心,因为如果您仍然像我们一样使用 Activity onStop() 调用 GoogleApiClient.disconnect(),则无法再保证 connect () 将在 disconnect() 之前被调用。如果发生这种情况,我没有看到 GPS 内部状态有任何问题,但 Google 的示例代码维护了一些与错误处理相关的状态,该代码可能需要更改才能工作。

    我从未确定 opengl 崩溃的确切根本原因。如果我们从 onStart 调用它(我们之前的实现稍后调用它),旧的 GPS 连接方法也可能会导致同样的崩溃。崩溃也有可能根本与 GPS 没有直接关系,而只是在 opengl 初始化期间使用 FragmentActivity 覆盖 UI 时的一般 opengl 驱动程序与窗口管理器问题。

    【讨论】:

      猜你喜欢
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-20
      相关资源
      最近更新 更多