从原生活动返回的android需要太长时间

时间:2013-05-29 10:51:08

标签: android native-activity

我的Android应用程序有两个活动:用Java编写的FrontEnd和用NativeActivity编写的Game。我使用Android NDK示例(samples \ native-activity \ jni \ main.c)作为参考来为游戏创建主C ++模块。当用户想要从Game返回FrontEnd时,我会拨打ANativeActivity_finish(g_state->activity)。之后我观察的内容如下:

  1. APP_CMD_TERM_WINDOW进入engine_handle_cmd回调
  2. 我通过调用engine_term_display(就像样本一样)来做出反应
  3. 出现FrontEnd活动。我可以按“播放”按钮,再次启动游戏,但我一直在等待....
  4. APP_CMD_STOP进入engine_handle_cmd回调
  5. APP_CMD_DESTROY进入engine_handle_cmd回调
  6. if (state->destroyRequested != 0)在main.cpp的主循环中触发
  7. 就像示例中一样,android_main会返回。现在,最后再次启动游戏是安全的......
  8. 我想强调步骤3和4之间的时间间隔大约是十秒(至少在DEBUG模式下)!如果我在第3步和第4步之间从FrontEnd重新启动游戏,它将启动“垂死”活动而不是新活动。

    我不知道APP_CMD_TERM_WINDOW和APP_CMD_STOP之间发生了什么,以及为什么需要这么长时间。我有另一个具有相同架构的应用程序,在第3步和第4步之间需要大约0.3秒。也许GC在第一个应用程序中有更多的工作要做...我不知道。所以我的问题是:

    1. NativeActivity完成整理过程需要这么长时间才是正常的吗?
    2. 当用户从FrontEnd重启游戏时,如何防止遇到死亡活动?
    3. 更新

      我进入LogCat:

      05-29 18:27:17.729:W / ActivityManager(476):启动超时已过期,放弃唤醒锁定! 05-29 18:27:17.739:W / ActivityManager(476):ActivityRecord的活动空闲超时{4209b2d0 u0 blah.blah.MainActivity}

      在第3步和第4步之间。

      用谷歌搜索,我发现这条消息被认为是“非危险的”,但它可以解释一下吗?

1 个答案:

答案 0 :(得分:0)

原因是我的FrontEnd活动是在一个无限循环中侦听GlobalLayout。它不是ANR,但它给UI线程带来了很大的负担。这导致Android等待大约。 10秒完成我的游戏活动。