【发布时间】:2011-05-12 11:26:36
【问题描述】:
我正在编写一个使用 java 代码和本机代码的应用程序(在 android 上)。每隔一段时间,就需要播放声音。不幸的是,本机代码没有用于音频的 API(或至少是稳定/官方的),但只有它知道何时需要播放声音。我想出了两种方法:
具有跟踪(在队列中或诸如此类的)需要播放的声音的功能。调用时,它将返回一个字符串,给出需要播放的声音的名称。这样,java 代码可以调用这个函数,直到它得到一个空字符串,并在其中播放声音。
返回需要播放的声音字符串数组,如果没有则返回空数组。
但后来我意识到 JNI 调用很昂贵。这些仍然需要Java代码在每次迭代左右调用该函数,以确保它正在播放正确的东西。对#1 来说尤其糟糕,因为它必须要求播放所有剩余的声音,尽管我想象的不会更糟。
那么,JNI 调用是否过于昂贵而无法实现?本机代码是否应该以某种方式通知 Java 代码需要在没有 Java 代码首先询问的情况下播放声音(从而减少 JNI 调用)。我确实注意到,android opengl es 2 ndk 示例中的绘制代码经过了很多 JNI,看起来还不错,但话又说回来,它只绘制了一个三角形和一个背景。
我不知道我会如何分析这个,除了同时制作两者并看看什么效果更好,所以我非常感谢您的意见。非常感谢。
【问题讨论】:
标签: java c++ android java-native-interface android-ndk