Android。 NDK。如何记录调用全局变量的析构函数?
Android. NDK. How to log calling destructor of global variable?
我们都知道 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 上测试它,例如:
class A {
A() {
LOGI("Constructor");
}
~A() {
LOGI("Destructor");
}
statis A a;
这样只打印"Constructor"。
也许是因为当 LOGI 不再为将要关闭的应用程序工作时调用析构函数?
问题:为什么析构函数中的 LOGI 不起作用?根据第一个例子,顶级析构函数确实在调用。
这不仅毫无意义,而且很可能适得其反。如果android想要你的进程使用的内存,它会终止进程回收它;如果没有,就不会。
为了具体解决您的问题,终止或退出进程不会调用析构函数,它只会终止执行,内核会批量释放所有内存和(常规)资源。
不要尝试猜测系统,因为这经常会导致终止进程只是为了让 android 立即重新启动它。此外,据称它可能会导致一些 Android IPC 资源(如相机)出现问题,当使用应用程序的进程意外终止时,这些资源可能无法释放。
我们都知道 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 上测试它,例如:
class A {
A() {
LOGI("Constructor");
}
~A() {
LOGI("Destructor");
}
statis A a;
这样只打印"Constructor"。 也许是因为当 LOGI 不再为将要关闭的应用程序工作时调用析构函数? 问题:为什么析构函数中的 LOGI 不起作用?根据第一个例子,顶级析构函数确实在调用。
这不仅毫无意义,而且很可能适得其反。如果android想要你的进程使用的内存,它会终止进程回收它;如果没有,就不会。
为了具体解决您的问题,终止或退出进程不会调用析构函数,它只会终止执行,内核会批量释放所有内存和(常规)资源。
不要尝试猜测系统,因为这经常会导致终止进程只是为了让 android 立即重新启动它。此外,据称它可能会导致一些 Android IPC 资源(如相机)出现问题,当使用应用程序的进程意外终止时,这些资源可能无法释放。