由于日志/gc/audioManager,Android代码滞后



为了简单起见:我正在开发一个小型应用程序,我们希望在该应用程序中依次单击多个对象。单击对象时,它应该播放一个声音。

这运行得很好,只是整个应用程序(包括LogCat的日志记录)不时会冻结大约5秒,之后它似乎会赶上。(所有线程冻结)我的意思是追赶;如果你在冻结期间继续点击,解冻后,它仍然知道该怎么做。

日志很简单:

01-17 14:52:88.292:D/AudioManager(17963):setStreamVolume(流类型:3,索引:11,标志:0)01-17 14:52:08.473:D/dalvikvm(17963):GC_CONCURRENT释放417K,48%释放3113K/5895K,外部140K/647K,暂停2ms+4ms

01-17 14:52:9.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_EXPLICIT释放338K,49%释放3061K/5895K,外部140K/647K,暂停43ms

请注意最后两个日志之间有5秒的延迟。

我试着删除所有音频,但这并不能解决任何问题
被记录的文本文件显然也不会影响任何事情。

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


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

public synchronized boolean removeEntity(long id)
{
    for (Entity ent : this.entities)
        if (ent.getId() == id)
            return this.entities.remove(ent);
    return false;
}

那个垃圾收集器正在做很多工作。你有没有试过在DDMS中运行Allocation Tracker来找出所有这些内存的分配位置?如果这是一个游戏,请确保您没有在主循环中创建大型对象。

Oke,Nevermind=(

经过几天的调试,我用同步的方法创建了一个旧的死锁。奇怪的是,当它没有连接到电脑时,它总是会继续。

我的错误!

最新更新