需要Android NDK NativeActivity内存管理吗

Android NDK NativeActivity Memory Management Needed?

本文关键字:管理 内存 NativeActivity Android NDK 需要      更新时间:2023-10-16

我正在使用NativeActivty和native_app_glue为Android编写OpenGL游戏。很难确定何时是删除堆分配的对象和OpenGL分配的对象的最佳时间。

在NDK的NativeActivity示例中,它们在处理完对象之后似乎不会删除对象。现在,我用两个删除函数来删除我的对象:一个用于OpenGL对象,另一个用于常规对象。我将它们分开,因为似乎只有事件处理线程才能删除OpenGL对象。我分配的常规对象通过正常的删除功能删除。

当用户按下后退按钮并返回应用程序时,OpenGL资源将被删除,应用程序将崩溃(尽管我认为它们应该由APP_CMD_INIT_WINDOW重新分配(。这让我怀疑我是否应该删除对象,因为似乎我不应该删除OpenGL对象。

我们应该用NDK删除堆分配的对象吗。我知道NDK应用程序仍然是沙盒的,并且有一个JVM进程,这需要内存管理吗?

编辑:我的应用程序崩溃的另一个例子是当游戏状态结束时删除对象。例如,从实际游戏转到菜单。回到游戏后,即使对象被重新分配,应用程序也会崩溃。它似乎只起作用一次。

事实证明,应用程序崩溃从来不是因为删除了堆分配的对象或OpenGL对象。一些被删除但仍包含在向量中的指针是问题的原因。然而,用NDK删除对象似乎并没有什么问题。