【发布时间】:2015-04-22 21:01:14
【问题描述】:
众所周知,android 在关闭应用程序后不会卸载 *.so。我通过在末尾添加“exit(0)”找到了解决方案,即解决了问题,但我想确切地知道一切都很好。
解决问题后代码正常运行:
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 不起作用?根据顶部析构函数的第一个示例,它确实在调用。
【问题讨论】:
-
关闭应用程序后它不会卸载 .so 是什么意思。你是说活动结束后?它不应该——如果你需要的话,可以调用 JNI 来释放任何变量并在 onDestroy 或finish 中调用它。如果你的意思是它在实际结束进程后没有卸载和重新加载 - 你错了。
-
是的,我的意思是在完成活动之后。我想释放的不是变量,而是单例,因此我需要 android 调用静态变量 aftef 完成活动的析构函数。
-
然后不要杀死或退出进程 - 批量取消分配内核中的所有内容。如果您真的想处理您的单例,请删除所有引用,然后根据其性质对其进行垃圾收集或调用其析构函数。
标签: android c++ static android-ndk