我正在使用 NativeActivity 和c++ 端android_native_app_glue.c/h
的android_main
函数。
我刚刚了解到,当应用程序被完全销毁(APP_CMD_DESTROY
生成事件)时,应用程序的Linux进程仍然没有被破坏,而是继续运行;而只是android_main()
返回并在应用程序重新启动时再次调用。
有趣的效果是,即使应用程序被完全销毁,也会有一些内存没有释放。例如,如果我在调用的 C++ 代码中创建了一个全局变量int test;
并为其设置了一个值,那么下次创建应用程序时123
它仍然是相同的。123
我假设我应该释放我在APP_CMD_DESTROY
生成时分配的所有内存android_main
并将返回。这个假设是真的吗?问题是:有多少内存可以留在内存中而不被释放的规则吗?一千字节可以吗?500k可以吗?50兆可以吗?400兆可以吗?
我的应用程序首先被销毁的原因是因为用户在另一个应用程序中做某事然后会返回到我的应用程序,而另一个应用程序会告诉我的应用程序用户在另一个应用程序中做了什么。如果我可以将所需的所有数据保留在内存中(通过全局变量),那将是最方便的,这样应用程序就知道在它被销毁后从哪里继续。尽管我知道制作全局变量通常被认为是一个坏主意。
那么,完全释放我分配的所有内存是个好主意吗,或者我可以保留一点,或者我可以保留很多并相信 Android 操作系统会继续执行并在这种情况下杀死实际的 Linux 进程它真的想摆脱分配的内存吗?因为如果我的应用程序在从另一个应用程序恢复后重新启动非常快并且它不需要在开始时加载一些资源,我将不胜感激。