gpt4 book ai didi

android - 显示屏旋转时 AudioRecord 锁定

转载 作者:行者123 更新时间:2023-11-29 21:49:02 24 4
gpt4 key购买 nike

我正在使用它进行一些信号处理。一切正常,除非屏幕关闭并且当时旋转了显示器。通常屏幕关闭只会产生一个 Activity onPause(),但是当屏幕旋转时,它会运行:onPause()、onStop()、onDestroy()、onCreate()、onStart()、onResume()、onPause()。也就是说,Android 似乎首先“取消旋转”屏幕。

不幸的是,这似乎导致 AudioRecord 以某种未知方式崩溃或卡住。

我所有操作的基本方法是在 onResume() 中启动一个新线程,这会实例化一个 AudioRecord 实例,设置它,开始录音,然后进入循环:

keepProcessing = true;

while (keepProcessing)
// read a block of data and process

在UI线程的onPause()中清除keepProcessing(一个volatile变量),然后等待工作线程停止。

if (thread.isAlive()) {
keepProcessing = false;
thread.join();
}

thread = null;

当另一个线程退出 keepProcessing 循环时,它会停止录音,释放 AudioRecord 资源,删除 AudioRecord 实例并终止。

作为一般的启动/停止机制,这一切都很好。检查断点和 adb 一切似乎都以正确的顺序发生。它只是在这种屏幕旋转的情况下不起作用。我只能认为这是因为在旧 Activity 中的所有内容都停止后,新 Activity onCreate() 等非常快速。即 AudioRecord 中有一些东西仍然很忙。当一个人试图再次打开屏幕时,一切都会卡住。

如果我伪造 AudioRecord 代码,使其实际上不开始录音,循环只是停止并休眠,然后不再停止录音,一切都很好。一旦录音机进入录音模式,它只会出错。

有什么建议吗?

最佳答案

当您旋转设备时,您的 Activity 实际上已停止并被销毁。如果你有后台线程在工作,这完全把你搞砸了。修复它的最佳方法是告诉 Android 不要这样做,方法是将 android:configChange="orientation" 添加到该 Activity 的 list 中。是的,这是 Google 做出的一个糟糕的架构决定,而且令人讨厌,以至于我几乎建议为所有 Activity 添加它。

关于android - 显示屏旋转时 AudioRecord 锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14943562/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com