一旦双簧管录制开始,主 UI 线程就会被阻止
Main UI Thread is blocked once oboe recording is started
我已经编写了一个基本应用程序,它开始使用双簧管库进行录制。 在主活动中,有 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()
}
}
相关文章:
- 一旦双簧管录制开始,主 UI 线程就会被阻止
- QtConcurrent - 在发布到 UI 线程的数千个结果中保持 GUI 响应
- 发出信号以从线程更新 UI
- 如何在 SDI 项目中使用 UI 线程
- 如何抓取指向Qt中弹出对话框的指针,该对话框阻止了QTest中的UI线程
- 如何在不阻塞 UI 线程的情况下对C++发出 http 请求
- C++:如何在UI线程和worker std::thread之间使用std::condition_variable
- 默认情况下,从工作线程发出Qt::信号会使主线程上的UI更新?
- 如何在对话框编辑框中显示来自 UI 线程类 Run() 函数的字符串
- 多线程 UI 的最佳方式
- 线程在更新 UI 之前启动
- PPL任务何时在UI线程上执行
- Android NDK 多线程块 UI 响应
- 从命令行构建x64 C++项目说:此操作应该只在UI线程上进行
- Qt信号以明显的延迟到达UI线程
- 访问列表项时的 UI 和工作线程同步
- Gtkmm : 如何从另一个线程更新 UI?不断
- 工作线程如何与主 UI 线程通信
- 提升::线程 UI 交互
- 两个线程(COM和WPF UI)访问同一个浮点