应用程序中的短音而不会崩溃

Posted

技术标签:

【中文标题】应用程序中的短音而不会崩溃【英文标题】:short tone in app without crashing it 【发布时间】:2017-10-24 13:31:37 【问题描述】:

是的,我在发布此内容之前确实搜索了答案。 :)

制作棋盘游戏,每个棋子都会掷骰子,然后在方块上一步一步移动。想要用短哔声跟随每一步。添加了方法“beep();”并将其放置在可移动屏幕上棋子位置的处理程序中。

当我添加 beep();游戏运行几个动作然后简单地停止,没有任何报告或错误消息。屏幕上的视图关闭,对话框只显示“不幸的是,BoardLS 已停止 [Ok]”,没有其他任何反应。

当我删除 beep();游戏运行正常。

如果有人知道哔声如何使游戏崩溃以及如何避免它,请尽可能简单地告诉我。谢谢。

我是这样发出哔哔声的:

private void beep() 
    ToneGenerator beepSound = new ToneGenerator(AudioManager.STREAM_MUSIC, 60);
    beepSound.startTone(ToneGenerator.TONE_PROP_BEEP, 75);
 // Short sound

我这样称呼它:

private final Handler playMove = new Handler() 
    @Override
    public void handleMessage(Message playMsg) 
        beep();
        player.setX(pcX[playPos]);
        player.setY(pcY[playPos]);
    
; // Put Player piece to new coordinates

playPos 是棋子正在或将要出现的平方数,

pcX 和 pcY 是屏幕坐标为正方形的数组。

handler 在 MainActivity 中,

并使用 playMove.sendEmptyMessage(0) 从 AsyncTask 调用;

AsyncTask 直接与全局变量一起工作,在这里没有问题。

【问题讨论】:

logcat中应该有stack trace。 【参考方案1】:

只需使用release() 方法释放创建的ToneGenerator 对象。

private void beep() 
        ToneGenerator beepSound = new ToneGenerator(AudioManager.STREAM_MUSIC, 60);
        beepSound.startTone(ToneGenerator.TONE_PROP_BEEP, 75);
        beepSound.release();
    

【讨论】:

很高兴为您提供帮助:)

以上是关于应用程序中的短音而不会崩溃的主要内容,如果未能解决你的问题,请参考以下文章

如何加载包含数百个 UIImage 实例的数组而不会因为内存激增而导致应用程序崩溃?

Android 播放短音的正确方法?

如何通过 NavigationLink 将 ForEach 数组索引传递到另一个 ForEach 而不会崩溃?

Windows应用程序因纯虚函数调用而崩溃

为啥发布版本有时会崩溃,而调试版本则不会?

释放自动释放对象不会使我的应用程序崩溃,为啥?