有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

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

怎样才能杀死我的原生进程,释放资源


共 (3) 个答案

  1. # 1 楼答案

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

  2. # 2 楼答案

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

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

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

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

  3. # 3 楼答案

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

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

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

    2)打电话给安卓。操作系统。过程killProcess(android.os.Process.myPid())

    只有在没有其他方法的情况下才建议使用第二种方法