Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/324.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Android代码因日志/gc/audioManager而延迟_Java_Android_Garbage Collection_Android Logcat_Android Audiomanager - Fatal编程技术网

Java Android代码因日志/gc/audioManager而延迟

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

为了简单起见:我正在开发一个小应用程序,我们想在其中依次单击几个对象。单击某个对象时,它应该会播放声音

这很有效,只是有时候整个应用程序(包括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秒的延迟

我尝试删除所有音频,但没有解决任何问题。
记录的文本文件也不会明显影响任何内容

有人知道如何解决这个烦人的问题吗?
提前谢谢


编辑:
在冻结期间暂停程序时,它指向某个方法。是什么原因导致了这种冻结:


那个垃圾收集器正在做很多工作。您是否尝试过在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;
}