Java Android活动被销毁时如何销毁本机进程

Java Android活动被销毁时如何销毁本机进程,java,android,java-native-interface,native,Java,Android,Java Native Interface,Native,我有一款Android原生游戏,正在通过JNI运行。 当我想退出应用程序时,我正在调用活动的Finish方法。活动正在被销毁,但本机(进程或内存)没有被销毁(或清除) 因此,当我再次启动游戏时,将直接恢复游戏的先前状态,而无需任何本机加载 怎样才能杀掉我的原生进程来释放资源。Android的活动生命周期与进程的概念严重脱钩,当你将传统的程序架构移植到它时,这确实让事情变得棘手 理想情况下,您可以通过具有初始化和销毁例程来修改本机程序,使其类似于活动生命周期,这样您就可以告诉它停止并清理。任何线程

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

因此,当我再次启动游戏时,将直接恢复游戏的先前状态,而无需任何本机加载


怎样才能杀掉我的原生进程来释放资源。

Android的活动生命周期与进程的概念严重脱钩,当你将传统的程序架构移植到它时,这确实让事情变得棘手

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

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


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

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

即使活动完成,Android本机进程也不会停止

我知道克服这个问题的两种方法是

1) 在jni本机类中创建一个方法,用于停止本机进程并从活动中调用它

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


第二种方法不建议仅在没有其他方法时使用

@deduplicator-这是众所周知的结果,android将用户可见会话的概念与宿主进程的概念分离开来。这实际上是一个概念问题。不需要任何代码。感谢您的回复:)。然后我想我必须在native中完全手动销毁所有内容。我能用Activity::OnDestroy来做这个吗?明白了!!谢谢你,克里斯