Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/367.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 有没有办法调用cleanup函数来清除本机代码,同时在Android中保留任何活动?_Java_Android_C_Android Activity_Android Ndk - Fatal编程技术网

Java 有没有办法调用cleanup函数来清除本机代码,同时在Android中保留任何活动?

Java 有没有办法调用cleanup函数来清除本机代码,同时在Android中保留任何活动?,java,android,c,android-activity,android-ndk,Java,Android,C,Android Activity,Android Ndk,看 我有mainActivity调用tempActivity 现在在tempActivity中,我调用一些本机方法和malloc一些数据。。那么现在当用户 1> 从临时活动返回到主活动或 2> 退出整个应用程序 我需要调用一个清理函数来释放本机方法中的所有数据malloc,那么我如何实现这些事情呢 android框架是否有任何方法来处理此类清理功能?推荐的方法是在onResume中分配您需要的任何内容,并在onPause中进行清理。这样,您可以在活动即将显示时进行分配,并在活动被其他活动部分或完

我有
mainActivity
调用
tempActivity

现在在tempActivity中,我调用一些本机方法和malloc一些数据。。那么现在当用户

1> 从临时活动返回到主活动或

2> 退出整个应用程序

我需要调用一个清理函数来释放本机方法中的所有数据malloc,那么我如何实现这些事情呢


android框架是否有任何方法来处理此类清理功能?

推荐的方法是在
onResume
中分配您需要的任何内容,并在
onPause
中进行清理。这样,您可以在活动即将显示时进行分配,并在活动被其他活动部分或完全遮挡时进行清理

参见摘自的图表

基本上,
活动
类定义了几种对您有用的方法:

  • onPause
    每次暂停活动时都会调用它:即屏幕锁定,您转到其他活动
  • 当您转到其他活动时,将调用onDestroy和onStop
也许这些方法中的一些会对你有用

  • 对于从
    tempActivity
    mainActivity
    的转换,在
    tempActivity
    ondestory
    方法中调用clean-up函数
  • 对于退出整个应用程序的情况:这要复杂得多。没有全局函数可以告知应用程序何时退出,因此您需要使用其他一些方法来跟踪应用程序是否正在退出

  • 我建议使用
    服务
    ,并将
    onstart命令
    功能设置为使用
    START\u NOT\u STICKY
    ,然后在
    服务
    ondestory方法中调用清理功能。如果您这样做,并且您有所有的
    活动
    s使用该服务,那么您可以在那里完成所有工作。

    好的,我认为问题在于如何在本机代码中释放使用
    malloc()
    分配的内存

    我在我的一个项目中也有同样的要求。我是用下面的方法做的


    onStop()
    onDestroy()
    中,我执行了一个本机调用,用于
    free()
    分配的内存。我认为这是最好最简单的方法。我不确定android是否为此提供了一些API。知道这样的事情是否存在是非正式的。谢谢。

    这两个项不能正确地映射在一起。我的意思是,
    onResume
    可以在
    onPause
    之后调用,而无需经过
    onStop
    ,从而使您在不释放资源的情况下分配两次。也许你需要在回答中纠正这个问题。