【发布时间】:2013-12-02 05:12:00
【问题描述】:
好吧,我使用 SoundPool onClick on ImageView 声音,其中一些启动另一个 Activity。像这样:
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()){
case R.id.main_menue_status:{
button_click.play(button_clickID, 1,1, 0, 0, 1); //this is SoundPoool's play
Intent intent=new Intent(context,MainMenueActivity.class);
startActivity(intent);
finish();
}
其他活动具有相同的 ImageViews(实际上是按钮)来浏览应用程序。 我一直使用finish();以防止创建数百万个活动副本。 所以在 SoundPool 播放大约 30 次后,声音就完全停止播放了。
我的猜测是因为我在声音完成之前完成()活动它正在播放,所以不知何故系统完全停止播放任何 SoundPool。
有什么建议吗?
UPD:日志:
12-01 19:04:49.797: E/AudioTrack(19981): AudioFlinger could not create track, status: -12
12-01 19:04:49.797: E/SoundPool(19981): Error creating AudioTrack
【问题讨论】:
-
您如何以及何时加载您的声音资源?我相信“状态:-12”是内存不足错误。我认为要么您加载的声音太大,要么您在加载的音轨上达到设备上限,技术上是 32,但通常更少。
-
每个 SoundPool 最多有 3 次播放(第一个参数),所以我在每个 Activity 中有 2-3 个 SoundPool 对象。当我离开活动时 - 我使用完成(),所以我假设 - 应该释放内存。
-
情况可能并非如此。 finish() 不能保证 Activity 将立即完成。相反,我会尝试在 onResume() 中加载您的声音资源,并在 onPause() 中卸载。
-
顺便说一句,SoundPool 构造函数中的第一个参数是 同时 流的最大数量,而不是可加载资源的最大数量。
-
我知道流,只是使用了错误的术语。我怎样才能卸载它们?
标签: java android audio soundpool