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

时间:2015-04-22 21:01:14

标签: android c++ static android-ndk

众所周知,在关闭申请后,android并没有卸载* .so。我通过添加"退出(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不起作用?根据顶级析构函数的第一个例子,真正调用。

1 个答案:

答案 0 :(得分:2)

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

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

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