Android код запаздывает из-за регистрации / gc / audioManager - PullRequest
0 голосов
/ 17 января 2012

Для простоты: я работаю над небольшим приложением, в котором мы хотим щелкнуть несколько объектов друг за другом. При нажатии на объект он должен воспроизводить звук.

Это работает хорошо, за исключением того, что время от времени все приложение (включая ведение журнала 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;
}

Ответы [ 2 ]

0 голосов
/ 18 января 2012

Oke, Nevermind = (

После нескольких дней отладки оказалось, что я создал старый мертвый замок с синхронизированными методами. Просто странно, как он всегда продолжается, когда не подключен к ПК.

Моя ошибка!

0 голосов
/ 17 января 2012

Этот сборщик мусора проделывает большую работу. Вы пытались запустить Allocation Tracker в DDMS, чтобы узнать, где выделяется вся эта память? Если это игра, убедитесь, что вы не создаете большие объекты в основном цикле.

...