播放ToneGenerator导致ANR

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了播放ToneGenerator导致ANR相关的知识,希望对你有一定的参考价值。

单击拨号盘时,播放ToneGenerator,但会导致ANR。

日志:

01-02 04:02:48.209 392 2548 E audio_hw_primary: out_write: error -5, cannot write stream data: I/O error
01-02 04:02:48.209 392 2548 D audio_hw_primary: out_standby: enter: stream (0xae38a800) usecase(0: deep-buffer-playback)

01-02 04:02:48.249 392 3038 E audio_hw_primary: out_write: error -5, cannot write stream data: I/O error
01-02 04:02:48.249 392 3038 D audio_hw_primary: out_standby: enter: stream (0xae3ed000) usecase(1: low-latency-playback)

01-02 04:02:48.772 423 1116 W AudioFlinger: write blocked for 10554 msecs, 50 delayed writes, thread 0xae883ec0
01-02 04:02:48.772 423 1116 D AudioFlinger: mixer(0xae883ec0) throttle end: throttle time(19)

01-02 04:02:49.579 1767 1767 E ToneGenerator: — Stop timed out

01-02 04:02:52.639 1767 1767 E ToneGenerator: — Delayed start timed out, status -110
01-02 04:02:52.639 1767 1767 W ToneGenerator: Tone start failed!!!, time 8178550

你可以查看代码:DialpadFragment.java--ToneGenerator

private void playTone(int tone, int durationMs) 
private void stopTone()

ToneGenerator停止超时导致ANR。但ToneGenerator导致停止超时的原因是什么?如何分析和解决这个问题?

答案

你可以简单地使用和它为我工作

 ToneGenerator toneG = new ToneGenerator(AudioManager.STREAM_ALARM, 100);
 toneG.startTone(ToneGenerator.TONE_CDMA_ALERT_CALL_GUARD, 200);

以上是关于播放ToneGenerator导致ANR的主要内容,如果未能解决你的问题,请参考以下文章

谷歌播放控制台中的 ANR(应用程序无响应)崩溃,我不明白

输入调度超时导致的 ANR - 在尝试获取我的公共 IP 地址时

当在onPostExecute中更新UI的AsyncTask正在运行时,操作UI将导致ANR

Android ANR优化 2

Android 进阶——性能优化之因Handler引起句柄泄漏导致ANR的定位和解决

Android 进阶——性能优化之因Handler引起句柄泄漏导致ANR的定位和解决