我有一个正在运行JNI的Android原生游戏 当我想退出应用程序时,我正在调用Activity的Finish方法。活动正在被破坏,但本机(进程或内存)不会被破坏(或清除)。
因此,当我再次启动游戏时,游戏的先前状态将直接恢复,无需任何本机加载。
如何杀死我的原生进程,以释放资源。
答案 0 :(得分:0)
Android的Activity Lifecycle与流程概念有很大的脱节,当你将传统的程序架构移植到它时,这会让事情变得棘手。
理想情况下,您可以通过初始化和销毁例程来修改您的本机程序,使其类似于Activity Lifecycle,这样您就可以告诉它停止并清理它。任何线程都应该停止运行。尝试清理一直到再次调用初始化例程将导致一个干净,功能齐全的新实例。
更拼命的是,您可以尝试完成()您的活动,然后调用System.exit()。这是非常气馁 - 它会在logcat中留下有问题的消息,并且可能的Android甚至可以在新的流程中快速重新创建您,在这种情况下您可以希望有逻辑来避免重启本机引擎。
另一件需要注意的事情可能是在一个独特的进程中运行您的本机代码,或者托管在清单中声明的android组件中,或者实际上作为在其自己的纯本机进程中运行的独立可执行文件(没有dvm)或者使用管道,unix套接字或可能的共享内存进行通信。
答案 1 :(得分:0)
Android Native进程即使活动完成也不会停止..
我知道克服这个问题的两种方法是
1)在你的jni本地类中创建一个方法来停止本机进程并从你的活动中调用它。
2)只需调用android.os.Process.killProcess(android.os.Process.myPid());
不建议使用第二种方法,除非别无其他..
答案 2 :(得分:-1)
您应该知道的一件事是finish()
或System.exit()
只会破坏当前的活动。如果要退出应用程序,则应首先清除活动堆栈。