我编写了一个基本应用程序,它开始使用双簧管库进行录音。在 MainActivity 中有 2 个按钮调用 2 个 JNI 函数,它们是:
- 录制音频()
- 停止录制()
在 native-lib.cpp 中,这两个 JNI 函数定义如下:
extern "C" JNIEXPORT jboolean JNICALL
Java_com_example_oboeaudiorecorder_MainActivity_recordAudio(
JNIEnv * env,
jobject MainActivity
) {
static auto a = OboeAudioRecorder::get();
a->StartAudioRecorder();
return true;
}
extern "C" JNIEXPORT jboolean JNICALL
Java_com_example_oboeaudiorecorder_MainActivity_stopRecording(
JNIEnv * env,
jobject MainActivity
) {
static auto a = OboeAudioRecorder::get();
a->StopAudioRecorder();
return true;
}
OboeAudioRecorder 类是一个单例。
当我点击开始录制的按钮时,录制已经开始了。但是当我想单击停止录制的按钮时,无法单击该按钮。我认为双簧管录音的开始阻塞了主 UI 线程。
OboeAudioRecorder 单例类可以在以下位置查看: https ://github.com/reuniware/OboeAudioRecorder/blob/master/app/src/main/cpp/OboeAudioRecorder.cpp
如何避免这种情况?谢谢。