2014-11-03 73 views
2

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

所以,当我再次启动游戏,游戏的以前的状态直接与任何本地装载恢复。

如何杀死我的本地进程以释放资源。

+0

@deduplicator - 这是程度的众所周知的后果的Android从托管进程的离婚一用户可见的会话的概念。这实际上是一个概念问题。不需要代码。 – 2014-11-03 03:59:41

回答

0

Android的活动生命周期在很大程度上由一个过程的概念,这确实使事情棘手的解耦,当你口常规的程序结构给它。

理想情况下,你会修改本地程序具有初始化和销毁​​程序,这样你可以告诉它停下来清理,以类似的活动生命周期。任何线程都应停止运行。尝试清理一些事情,再次调用初始化例程将导致一个干净的,功能性的新实例。

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

另一件需要注意的事情可能是在不同的进程中运行你的本地代码,它们可以在清单中以这种方式声明的android组件中托管,也可以作为独立的可执行文件运行在它自己的纯本机进程中dvm或art)使用管道,unix套接字或可能的共享内存进行通信。你应该知道

+0

感谢您的回复:)。然后,我想我必须彻底摧毁一切在本地手动。我可以使用Activity :: OnDestroy来做到这一点吗? – 2014-11-03 04:20:11

+0

明白了!谢谢@Chris – 2014-11-03 04:39:42

-1

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

0

Android原生的过程就不会停止,即使活动结束..

两个方法我知道要解决这个问题是

1)建立在你的JNI本地类中的方法停止本机进程和调用它形成你的活动。

2)只需调用android.os.Process.killProcess(android.os.Process.myPid());不建议

第二个方法使用只有别人没有办法..