Android NDK - NativeActivity 与 JNI 库

标签 android android-ndk java-native-interface

两年前,我在 android-7 (Eclair) 上开发了一个增强现实框架.由于 AR 应用程序是计算密集型任务,我开发了一个 JNI c++ 库,Java Activity 使用它来呈现和注册虚拟环境。在 Java 中获取的传感器读数被传递到下划线 c++ 库以计算虚拟环境的注册。三维对象由从 GLSurfaceView 调用的 native 绘制函数呈现。 .这会导致大量 JNI 调用。

现在我想将应用程序移植到 android-15(Ice Cream Sandwich) .从 android-9(Gingerbread) 开始Android 允许使用 NativeActivity .

我想了解开发 AR 应用程序的更好方法。由于每个 JNI 调用都会引入开销,因此最好避免它们。是否可以使用 NativeActivity?我没有找到详尽的指南来解释 NativeActivity 的工作原理,而是阅读 this document无论如何,它似乎会导致很多 JNI 调用。是否有架构文档解释 NativeActivity 的工作原理? NativeActivity 只是一个避免 java 代码的“JNI 包装器”吗?关于性能,使用 NativeActivity 而不是像我以前那样使用 JNI 库有什么优势吗?

非常感谢。

最佳答案

NativeActivity 不会提升您的框架的性能。它仍然使用 JNI 与系统通信,只是在幕后。

此外,有充分的理由不使用它。如果我正确理解您的目的,您希望其他应用程序利用您的代码。通过强制他们使用 NativeActivity,您会严重减少他们的自由,并要求他们在不太熟悉的环境中挣扎。 NativeActivity 有很多限制,例如它不能加载多个 JNI 库。

最后,如果您希望优化您的 AR 框架,我会建议一个完全不同的方向:您可以使用新的 setPreviewTexture() API。

关于Android NDK - NativeActivity 与 JNI 库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13624499/

相关文章:

java - TextView 在 AsyncTask 中给出 NullPointerException

android - 黑色方 block 的 GridView 是否会比白色方 block 的 GridView 更能影响性能?

Android GridLayout 只显示最后一个 child

android - Android NDK 的依赖注入(inject)?

java - JNI无法释放内存

java - 机器人 JNI : app stops working

android - 突出显示 ListView 选定的行

android - 未定义对myfunction的引用

java - 如何使用 Java 获取应用程序的 GUI Activity

java - 如何在 JNI 方法中创建 jcharArray?