一旦双簧管录制开始,主 UI 线程就会被阻止

Main UI Thread is blocked once oboe recording is started

本文关键字:线程 UI 双簧管 开始      更新时间:2023-10-16

我已经编写了一个基本应用程序,它开始使用双簧管库进行录制。 在主活动中,有 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 singleton 类可以在以下位置查看: https://github.com/reuniware/OboeAudioRecorder/blob/master/app/src/main/cpp/OboeAudioRecorder.cpp

如何避免这种情况?谢谢。

我现在从线程调用 recordAudio 函数,如下所示:

buttonRecordAudio.setOnClickListener{
val permission = ContextCompat.checkSelfPermission(this, Manifest.permission.RECORD_AUDIO)
if (permission != PackageManager.PERMISSION_GRANTED) {
Log.i("", "Permission to record denied")
ActivityCompat.requestPermissions(this, arrayOf(Manifest.permission.RECORD_AUDIO), RECORD_REQUEST_CODE)
} else {
Thread(Runnable { recordAudio() }).start()
}
}