播放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 - 在尝试获取我的公共 IP 地址时
当在onPostExecute中更新UI的AsyncTask正在运行时,操作UI将导致ANR