Для простоты: я работаю над небольшим приложением, в котором мы хотим щелкнуть несколько объектов друг за другом. При нажатии на объект он должен воспроизводить звук.
Это работает хорошо, за исключением того, что время от времени все приложение (включая ведение журнала LogCat) просто зависает примерно на 5 секунд, после чего кажется, что оно наверстывает упущенное. (Все темы замораживаются)
Я догоняю; если вы продолжите нажимать во время остановки, после разморозки он все еще знает, что делать.
Журнал прост:
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 освобожден 417K, 48% свободен 3113K / 5895K, внешний 140K / 647K, приостановлен 2 мс + 4 мс
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 освобожден 338K, 49% свободен 3061K / 5895K, внешний 140K / 647K, приостановлен 43 мс
Обратите внимание на 5-секундную задержку между двумя последними журналами.
Я пытался удалить все аудио, но это ничего не решает.
Регистрируемый текстовый файл также, по-видимому, ни на что не влияет.
Кто-нибудь знает, как решить эту надоедливую проблему?
Заранее спасибо.
Edit:
При остановке программы во время остановки она указывает на определенный метод. Что может вызвать это замораживание в этом:
public synchronized boolean removeEntity(long id)
{
for (Entity ent : this.entities)
if (ent.getId() == id)
return this.entities.remove(ent);
return false;
}