Java Android代码因日志/gc/audioManager而延迟
为了简单起见:我正在开发一个小应用程序,我们想在其中依次单击几个对象。单击某个对象时,它应该会播放声音 这很有效,只是有时候整个应用程序(包括LogCat的日志)会冻结大约5秒钟,之后它似乎会跟上进度。(所有线程冻结) 我指的是追赶;如果在冻结期间继续单击,在解冻后,它仍然知道要做什么 日志很简单: 01-17 14:52:08.292:D/AudioManager(17963):setStreamVolume(流类型:3,索引:11,标志:0) 01-17 14:52:08.473:D/dalvikvm(17963):GC_并发释放417K,48%释放3113K/5895K,外部140K/647K,暂停2ms+4ms 01-17 14:52:09.033:D/AudioManager(17963):setStreamVolume(流类型:3,索引:11,标志:0) 01-17 14:52:09.484:D/AudioManager(17963):setStreamVolume(流类型:3,索引:11,标志:0) 01-17 14:52:10.174:D/AudioManager(17963):setStreamVolume(流类型:3,索引:11,标志:0) 01-17 14:52:10.785:D/AudioManager(17963):setStreamVolume(流类型:3,索引:11,标志:0) 01-17 14:52:15.169:D/dalvikvm(17963):GC_显式释放338K,49%释放3061K/5895K,外部140K/647K,暂停43ms 请注意最后两个日志之间有5秒的延迟 我尝试删除所有音频,但没有解决任何问题。Java Android代码因日志/gc/audioManager而延迟,java,android,garbage-collection,android-logcat,android-audiomanager,Java,Android,Garbage Collection,Android Logcat,Android Audiomanager,为了简单起见:我正在开发一个小应用程序,我们想在其中依次单击几个对象。单击某个对象时,它应该会播放声音 这很有效,只是有时候整个应用程序(包括LogCat的日志)会冻结大约5秒钟,之后它似乎会跟上进度。(所有线程冻结) 我指的是追赶;如果在冻结期间继续单击,在解冻后,它仍然知道要做什么 日志很简单: 01-17 14:52:08.292:D/AudioManager(17963):setStreamVolume(流类型:3,索引:11,标志:0) 01-17 14:52:08.473:D/dal
记录的文本文件也不会明显影响任何内容 有人知道如何解决这个烦人的问题吗?
提前谢谢
编辑:
在冻结期间暂停程序时,它指向某个方法。是什么原因导致了这种冻结:
那个垃圾收集器正在做很多工作。您是否尝试过在DDMS中运行分配跟踪程序以找出所有内存的分配位置?如果这是一个游戏,请确保你没有在主循环中创建大对象。OK,别管它了=( 经过一天的调试,我发现我用同步方法创建了一个旧的死锁。奇怪的是,当不连接到PC时,它总是继续运行
我的错误!没有代码-没有太多帮助,因为有不同的方法来做你所说的。如果音频很短并且声音数量有限,我会使用声音池。声音池会将所有音频加载到内存中,提供对音频的更快访问,但是有一些限制,没有代码,我无法说出有什么帮助。因为我不知道问题出在哪里,发布代码是不可能的。但正如帖子中提到的:删除所有音频功能并不能解决任何问题。因此音频与此无关。(日志似乎也是如此……我将编辑原始帖子)尽管检查分配情况很有用,但它并没有告诉我任何异常情况。无论如何,谢谢。
public synchronized boolean removeEntity(long id)
{
for (Entity ent : this.entities)
if (ent.getId() == id)
return this.entities.remove(ent);
return false;
}