繁体   English   中英

Android Activity被销毁时如何销毁本机进程

[英]How to destroy Native process when Android Activity is destroyed

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

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

怎样才能杀死我的本机进程来释放资源。

Android的Activity Lifecycle与流程的概念完全脱节,当您将常规程序体系结构移植到该流程时,这确实使事情变得棘手。

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

更令人绝望的是,您可以尝试完成活动,然后调用System.exit()。 强烈建议不要这样做 -它将在logcat中留下看起来有问题的消息,并且Android甚至有可能在新流程中快速重新创建您,在这种情况下,您还需要具有避免重启本机引擎的逻辑。

要看的另一件事可能是在一个不同的进程中运行本机代码,要么托管在清单中以这种方式声明的android组件中,要么实际上是作为一个独立的可执行文件在其自己的纯本地进程中运行(没有dvm或art)使用管道,Unix套接字或可能的共享内存进行通信的信息。

即使活动完成,Android Native进程也不会停止。

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

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

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

不建议仅使用第二种方法。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM