To keep it simple: I'm working on a small app where we want to click several objects after each other. On clicking an object, it is supposed to play a sound.
This works well, except that from time to time, the entire app (including LogCat's logging) just freezes for about 5 seconds, after which it seems to catch up. (All threads freeze) With catching up I mean; if you continue clicking during the freeze, after unfreezing, it still knows what to do.
The Log is simple:
01-17 14:52:08.292: D/AudioManager(17963): setStreamVolume(streamType:3, index:11, flags:0) 01-17 14:52:08.473: D/dalvikvm(17963): GC_CONCURRENT freed 417K, 48% free 3113K/5895K, external 140K/647K, paused 2ms+4ms
01-17 14:52:09.033: D/AudioManager(17963): setStreamVolume(streamType:3, index:11, flags:0) 01-17 14:52:09.484: D/AudioManager(17963): setStreamVolume(streamType:3, index:11, flags:0) 01-17 14:52:10.174: D/AudioManager(17963): setStreamVolume(streamType:3, index:11, flags:0) 01-17 14:52:10.785: D/AudioManager(17963): setStreamVolume(streamType:3, index:11, flags:0) 01-17 14:52:15.169: D/dalvikvm(17963): GC_EXPLICIT freed 338K, 49% free 3061K/5895K, external 140K/647K, paused 43ms
Notice the 5 second delay between the last two logs.
I tried removing all audio, but that doesn't solve anything.
A text file being logged also does not influence anything apparently.
Does anyone have a clue as how to solve this annoying problem?
Thanks in advance.
Edit:
When pausing the program during the freeze it points to a certain method. What could cause this freeze in this:
public synchronized boolean removeEntity(long id)
{
for (Entity ent : this.entities)
if (ent.getId() == id)
return this.entities.remove(ent);
return false;
}
That garbage collector is doing a lot of work. Have you tried running Allocation Tracker in DDMS to find out where all this memory is being allocated? If this is a game, make sure you're not creating large objects in the main loop.
ReplyDeleteOke, Nevermind =(
ReplyDeleteAfter a days worth of debugging, it turns out I created a ye old dead lock with the synchronized methods. Just weird how it always continues when not hooked to the PC.
My mistake!