如何解决 AudioFlinger 服务器死机!安卓系统出错?
Posted
技术标签:
【中文标题】如何解决 AudioFlinger 服务器死机!安卓系统出错?【英文标题】:How to Resolve a AudioFlinger server died! Error in Android? 【发布时间】:2022-01-12 20:34:21 【问题描述】:android 新手,这是我的第一个应用程序,我已经解决这个问题好几天了。我的应用程序允许用户在玩游戏时播放 6 种背景乐器。音乐全部为 .mp3 格式,直接保存在应用程序的 R.raw 文件夹中 - 没有从服务器流式传输。
问题是选择轨道时,轨道播放一秒钟,冻结一两个,然后拾取并开始播放。这总是在第一次选择曲目时发生,然后通常在第二次发生,然后如果我通过播放不同的曲目继续测试,错误会变成 50/50 是否会发生。
在要求它播放曲目之前,我总是确保 mediaPlayer == null。我还认为这可能是内存问题,所以在调用 mediaPlayer 之前,我使用以下代码检查内存:
private ActivityManager.MemoryInfo getAvailableMemory()
ActivityManager activityManager = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
ActivityManager.MemoryInfo memoryInfo = new ActivityManager.MemoryInfo();
activityManager.getMemoryInfo(memoryInfo);
return memoryInfo;
if (!memoryInfo.lowMemory)
Log.d("Tag", "NOT LOW MEMORY");
else
Log.d("Tag", "LOW MEMORY!!! LOW MEMORY!!!!");
每次结果都是“内存不足”。我还检查了内存泄漏,但在我的应用程序中没有发现任何内存泄漏。我最后的手段是在后台线程上播放曲目,但我得到了相同的结果。我在 Logcat(Info) 中看到的是这些错误:
E/Audiosystem-JNI: Command failed for android_media_AudioSystem_error_callback: -32
W/AudioSystem: AudioFlinger server died!
W/AudioSystem: AudioPolicyService server died!
我最近的测试是超级简化代码,我尽我所能把它精简了。当播放器点击按钮播放曲目时,这是直接代码:
boolean stopThread = false;
startNewBackgroundThreadForMediaPlayer(stopThread);
方法:
private void startNewBackgroundThreadForMediaPlayer(boolean stopThread)
BackgroundMediaPlayerThreadRunnable runnable = new BackgroundMediaPlayerThreadRunnable(stopThread);
new Thread(runnable).start();
内部类:
private class BackgroundMediaPlayerThreadRunnable implements Runnable
boolean stopThread;
BackgroundMediaPlayerThreadRunnable(boolean stopThread)
this.stopThread = stopThread;
@Override
public void run()
if(!stopThread)
MediaPlayer player = new MediaPlayer();
player = MediaPlayer.create(SongsActivity.this, R.raw.song1);
player.start();
我遗漏了一些代码,比如停止歌曲/线程。我有更复杂的代码检查媒体播放器的状态(==null?),将歌曲保存到共享首选项等。无论是这个代码还是其他代码,结果都是一样的。
我已经用尽了我所有的资源,但对于这样的错误,我还没有找到太多信息。我知道这不是真正的 mp3,因为它们有时可以播放。我正在真实设备上进行测试,Pixel 4XL。此外,这个错误刚刚开始发生,同样的代码在 3-4 天前工作得很好。任何人都可以帮助我吗?有没有我应该尝试的 mediaPlayer 的替代品?这是我的应用程序的最后一个大障碍。谢谢。
【问题讨论】:
【参考方案1】:我花了很多时间试图弄清楚这一点,我遇到的所有东西都远远超出了我的理解水平。最终,我将 Pixel 手机重置为出厂设置,然后解决了问题。
不确定这是否是最佳解决方案,但这是唯一有效的方法。也许这个答案会帮助其他人解决同样的问题。
编辑: 我也在用旧的 Pixel 手机进行测试,所以手机本身可能有些缺陷。
【讨论】:
以上是关于如何解决 AudioFlinger 服务器死机!安卓系统出错?的主要内容,如果未能解决你的问题,请参考以下文章
Android 9 Audio系统笔记:AudioFlinger音频流处理流程
Android 9 Audio系统笔记:AudioFlinger音频流处理流程
Android 9 Audio系统笔记:AudioFlinger音频流处理流程