Android。 NDK。如何记录调用全局变量的析构函数?

问题描述:

大家都知道android在关闭应用程序后不会卸载* .so。我已经通过在最后加入“exit(0)”来找到解决方案,这是解决问题的方法,但我想确切地知道一切正常。Android。 NDK。如何记录调用全局变量的析构函数?

的代码是做工精细的解决问题后预期:

static int value = 0; 

// In android_main 
LOGI("value = %d", value); // always print 0, but not 1 after second run of 
// application as it was without "exit(0)" at the end 
value = 1; 

我想测试上像类:

class A { 
    A() { 
    LOGI("Constructor"); 
    } 
    ~A() { 
    LOGI("Destructor"); 
    } 

statis A a; 

在这种方式只打印“构造”。 也许是因为析构函数在LOGI不工作之后调用更多的将被关闭的应用程序? 问题:为什么LOGI在析构函数中不起作用?根据第一个例子,*析构函数真的在调用。

+2

你是什么意思,关闭应用程序后,它不会卸载.so。你完成活动后的意思是?它不应该 - 如果你需要的话,把一个JNI调用释放任何变量,并在onDestroy或完成调用它。如果你的意思是在实际结束这个过程之后它不会卸载并重新加载 - 你错了。 –

+0

是的,我的意思是在完成活动后。我想分解变量,但单身人士,因此我需要android调用静态变量aftef完成活动的析构函数。 –

+0

然后不要终止或退出进程 - 批量取消分配内核中的所有内容。如果你真的想要抛弃你的单例,删除所有的引用,然后垃圾收集它或调用它的析构函数,适当的性质。 –

这不仅没有意义,而且很可能适得其反。如果android想要你的进程使用的内存,它会终止进程回收它;如果没有,它不会。

要专门解决您的问题,查杀或退出进程不会调用析构函数,它只会终止执行,并且内核批量释放所有内存和(常规)资源。

不要尝试第二次猜测系统,因为这可能会导致杀死一个进程只让android立即重新启动它。此外,据称它可能会导致一些Android IPC资源(如相机)出现问题,这些资源在利用应用程序的进程意外死亡时可能无法释放。

+0

那我该如何创建一个单身人士呢? –

+0

以通常的方式 - 只有在不存在的情况下才创建全局静态对象。这与此无关,如果真的不熟悉属于自己的问题 - 尽管这里可能已经有重复。 –