我有一个运行在JNI上的Android本地游戏。
当我想退出应用程序时,我调用Activity的Finish方法。Activity被销毁了,但本地进程或内存没有被销毁或清除。
所以,当我再次启动游戏时,游戏的先前状态直接恢复而没有任何本地加载。
如何杀死我的本地进程,以释放资源。
我有一个运行在JNI上的Android本地游戏。
当我想退出应用程序时,我调用Activity的Finish方法。Activity被销毁了,但本地进程或内存没有被销毁或清除。
所以,当我再次启动游戏时,游戏的先前状态直接恢复而没有任何本地加载。
如何杀死我的本地进程,以释放资源。
即使活动已经完成,Android本地进程也不会停止。
我知道两种方法来解决这个问题:
1)在您的JNI本地类中创建一个方法来停止本地进程,并从您的活动中调用它。
2)只需调用android.os.Process.killProcess(android.os.Process.myPid());
第二种方法不建议使用,仅在没有其他方法时使用。
Android的Activity生命周期与进程的概念高度解耦,这使得在将传统程序架构移植到Android上时变得棘手。
理想情况下,您应该修改本地程序以类似于Activity生命周期的方式进行初始化和销毁例程,以便您可以告诉它停止并清理。任何线程都应该停止运行。尽量将事情清理到调用初始化例程会导致一个干净、功能性的新实例的程度。
更加令人绝望的是,您可以尝试完成()您的活动,然后调用System.exit()。这是强烈不建议的——它会在logcat中留下问题看起来很严重的消息,而且Android甚至可能会迅速地在一个新进程中重新创建您,在这种情况下,您将需要有逻辑来避免重新启动本地引擎。
另一个要考虑的事情是在一个独立的进程中运行本地代码,可以在清单中声明为android组件托管,也可以作为一个独立的可执行文件在其自己的纯本地进程中运行(没有dvm或art),您可以使用管道、unix套接字或可能的共享内存与之通信。
finish()
或者System.exit()
只能销毁当前活动。如果你想退出应用程序,你应该首先清除活动堆栈。