我在将原生游戏与 Android 中的 Java 应用程序集成时遇到了一个奇怪的问题。
我必须为游戏添加一个原生 .so 文件,并用标准活动包装它以显示启动屏幕、菜单和其他一些东西。
我注意到在本机代码中似乎有一个终止进程调用。我在 logcat 中看到了这一点。
致命信号 11 (SIGSEGV) 在 0x00000000 (code=1)
紧随其后的是
DEBUG/Zygote(119):进程 28720 被信号 (11) 终止
当我在本机游戏中点击退出选项时会发生这种情况。发生这种情况时,应用程序将重新启动,即在清单中设置为启动器的 Activity 将在新进程中创建。我在 logcat 中看到 Activity 管理器注意到该进程已经终止,然后执行以下操作:
INFO/ActivityManager(192):为活动 my.package.name/my.launcher.Activity 启动 proc my.package.name:pid=28820 uid=10061 gids={3003, 1015}
不幸的是,我无法获得本机源代码,也无法对其进行更改。
到目前为止,我想出的最佳解决方案是在 onCreate 中进行某种检查,如果我认为应用程序已重新启动,则调用完成。我真的不喜欢这样做的想法,这就是我现在在这里发帖的原因。
有人对处理此问题的“好”方法有任何建议吗?任何撕开我提出的解决方案也是受欢迎的。
我想这不是一个标准问题,所以框架在这里可能没有太多帮助。尽管我花了很多时间阅读文档并在 Android 上进行开发,但我距离成为一名 Android 专家还很遥远,所以任何关于这方面的建议都会有很大帮助。
编辑:
请注意,此行为可通过创建 2 个活动来重现。第一个应该启动第二个。第二个Activity应该有办法杀死应用程序进程比如一个按钮调用
android.os.Process.killProcess(pid);
因此,如果 Activity A 是清单中的启动器 Activity。A 启动 B。B 终止进程。A 由 Android 操作系统在不同的进程中自动启动。
我这样做是为了测试我正在做的任何事情是否导致重新启动。测试与描述的完全一样,没有对清单进行编辑,也没有额外的代码。重启总会发生。只是希望我能找到一种方法来阻止它发生。