【问题标题】:How to destroy Native process when Android Activity is destroyedAndroid Activity被销毁时如何销毁Native进程
【发布时间】:2014-11-03 03:31:07
【问题描述】:

我有一个通过 JNI 运行的 Android 原生游戏。
当我想退出应用程序时,我正在调用 Activity 的 Finish 方法。活动被破坏,但本机(进程或内存)没有被破坏(或清除)。

所以当我再次启动游戏时,游戏的先前状态会直接恢复,无需任何原生加载。

如何也杀死我的本机进程以释放资源。

【问题讨论】:

  • @deduplicator - 这是众所周知的结果,Android 将用户可见会话的概念与托管进程的概念分离的程度。这实际上是一个概念问题。无需代码。

标签: java android java-native-interface native


【解决方案1】:

Android 的 Activity 生命周期与进程的概念高度分离,当您将传统的程序架构移植到它时,这确实会让事情变得棘手。

理想情况下,您可以通过初始化和销毁​​例程来修改您的本地程序以类似于活动生命周期,这样您就可以告诉它停止和清理。任何线程都应该停止运行。尝试清理一切,直到再次调用初始化例程将产生一个干净的、功能正常的新实例。

更绝望的是,您可以尝试完成()您的活动,然后调用 System.exit()。这是非常不鼓励 - 它会在 logcat 中留下看起来有问题的消息,并且 Android 甚至可能会在新进程中快速重新创建您,在这种情况下您需要有逻辑来避免也重新启动本机引擎。

另一件需要注意的事情可能是在一个不同的进程中运行您的本机代码,或者托管在一个在清单中以这种方式声明的 android 组件中,或者实际上作为一个独立的可执行文件在其自己的纯本机进程中运行(没有 dvm或艺术),您使用管道、unix 套接字或可能的共享内存与之通信。

【讨论】:

  • 感谢您的回复 :)。然后我想我必须在本机中手动完全销毁所有内容。我可以使用 Activity::OnDestroy 来执行此操作吗?
  • 知道了!!非常感谢@Chris
【解决方案2】:

即使活动结束,Android Native 进程也不会停止..

我知道解决这个问题的两种方法是

1) 在你的 jni 原生类中创建一个方法来停止原生进程并在你的活动中调用它。

2) 只需调用 android.os.Process.killProcess(android.os.Process.myPid());

第二种方法不推荐使用,只有在没有其他方法的情况下才使用..

【讨论】:

    【解决方案3】:

    您应该知道的一件事是finish()System.exit() 只能破坏当前活动。如果您想退出应用程序,您应该先清除活动堆栈。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多