Android活动生命周期和JNI本机代码生命周期

Android活动生命周期和JNI本机代码生命周期,android,android-activity,java-native-interface,lifecycle,Android,Android Activity,Java Native Interface,Lifecycle,我有一个带有本机代码的简单应用程序。也就是说,活动加上本机代码 当活动进入后台时,我保持本机代码运行以进行一些处理。问题是,当操作系统(由于资源不足)终止活动时,JNI代码似乎不知道Java land中发生了什么,仍然在执行它的工作,因此浪费了资源。为什么Android只杀死活动而不是整个过程?在本例中,本机代码如何知道活动已被终止?OnDestroy()可能不会被调用 您可以在一个Android中拥有多个活动。当您的活动进入后台时,它们可能会被杀死以回收资源。该应用程序通常会一直保留,直到手机

我有一个带有本机代码的简单应用程序。也就是说,活动加上本机代码


当活动进入后台时,我保持本机代码运行以进行一些处理。问题是,当操作系统(由于资源不足)终止活动时,JNI代码似乎不知道Java land中发生了什么,仍然在执行它的工作,因此浪费了资源。为什么Android只杀死活动而不是整个过程?在本例中,本机代码如何知道活动已被终止?OnDestroy()可能不会被调用

您可以在一个Android中拥有多个活动。当您的活动进入后台时,它们可能会被杀死以回收资源。该应用程序通常会一直保留,直到手机内存非常不足,或者用户手动关闭你的应用程序。粗略地说,这个过程一直持续到应用程序被终止

因为您可以在后台继续处理,所以当您的活动被重新创建时,您可以检查全局变量的状态,也许可以从您停止的地方开始

请记住,活动经常被终止,因此在后台进行处理并没有多大意义,而是在活动终止时停止。在本例中,当调用
onStop()
时,您也可以停止

活动是用户可以做的一件专注的事情

它通常是在屏幕上可见并引起用户注意的东西。它关联了一个状态机,描述了当另一个活动激活时显示和隐藏的生命周期。操作系统可以根据自己的选择和内存允许自由启动和停止活动

此外,Android架构的一个关键点是活动和服务是可重用的软件组件,不一定与流程有一一关系。在与您的活动相同的流程中,系统中的另一个流程可能正在使用服务

当某个活动收到
onPause()
onStop()
onDestroy()
通知时,如果代码的JNI部分在后台仍处于活动状态,则这只能是因为您尚未将这些消息转发给它。系统当然不知道如何清理本机代码的资源利用率,特别是分配给
new()
malloc()
的内存。除非您释放它,否则它只能在进程终止时恢复

如果您担心系统没有足够快地终止您的活动,因此保留了对本地资源的引用,那么这是一个很好的迹象,表明系统没有资源限制


您可以考虑将应用程序的本地部分实现为A,并在DIS IUE短时间后进行自毁。 你没有回答“为什么Android只杀死活动而不是整个过程?”。对于NDK,在onStop中没有调用回调,这是用户所问的。好的,我更新了我的答案以尝试更清楚地回答这个问题,谢谢您是否有“活动、应用程序,以及仅在以后的流程”销毁的来源?我已经(遵循Commonware的链接以了解更多的困惑)Hi@marko我有关于将应用程序的本机部分作为服务运行的相关问题。你能建议一个方法吗?据我所知,应用程序的本机部分在android.app.NativeActivity.class上被称为usingintent