java如何在Android活动被销毁时销毁本机进程
我有一款Android原生游戏,正在JNI上运行
当我想退出应用程序时,我调用活动的Finish方法。活动正在被销毁,但本机(进程或内存)没有被销毁(或清除)
因此,当我再次启动游戏时,游戏的前一个状态将直接恢复,无需任何本机加载
怎样才能杀死我的原生进程,释放资源
你可以在下面搜索框中键入要查询的问题!
我有一款Android原生游戏,正在JNI上运行
当我想退出应用程序时,我调用活动的Finish方法。活动正在被销毁,但本机(进程或内存)没有被销毁(或清除)
因此,当我再次启动游戏时,游戏的前一个状态将直接恢复,无需任何本机加载
怎样才能杀死我的原生进程,释放资源
# 1 楼答案
你应该知道的一件事是
finish()
或System.exit()
只能破坏当前的活动。如果要退出应用程序,应首先清除活动堆栈# 2 楼答案
Android的活动生命周期与流程的概念严重脱钩,当你将传统的程序架构移植到它时,这确实会让事情变得棘手
理想情况下,您可以通过初始化和销毁例程来修改本机程序,使其类似于活动生命周期,这样您就可以告诉它停止并清理。任何线程都应该停止运行。尝试清理到这样一个程度:再次调用初始化例程将产生一个干净的、功能正常的新实例
更绝望的是,你可以尝试完成你的活动,然后调用系统。退出()。这是非常不鼓励的——它会在logcat中留下看起来有问题的消息,而且Android甚至可能会在一个新的过程中快速重新创建您,在这种情况下,您也需要有逻辑来避免重新启动本机引擎
另一个需要注意的问题是,在一个不同的进程中运行本机代码,或者托管在清单中以这种方式声明的android组件中,或者实际上作为一个独立的可执行文件,运行在它自己的纯本机进程(没有dvm或art)中,您可以使用管道、unix套接字或可能的共享内存与之通信
# 3 楼答案
即使活动完成,Android本机进程也不会停止
我知道克服这个问题的两种方法是
1)在jni本机类中创建一个方法,用于停止本机进程,并在活动中调用它
2)打电话给安卓。操作系统。过程killProcess(android.os.Process.myPid())
只有在没有其他方法的情况下才建议使用第二种方法