Я боролся с зависанием (тупиком) в OpenGL на прошлой неделе.Я наконец понял, что система зависает после запуска сборщика мусора.Вот пример из LogCat:
02-16 08:49:32.609: INFO/ActivityManager(98): Displayed activity com.southernstars.skysafari/.SkySafariActivity: 2219 ms (total 2219 ms)
02-16 08:49:37.369: DEBUG/dalvikvm(1863): GC_FOR_MALLOC freed 4144 objects / 387544 bytes in 46ms
02-16 08:49:37.389: ERROR/Adreno200-ES20(1863): gsl_device_waittimestamp failed in rb_timestamp_wait_on_timestamp
02-16 08:49:38.516: WARN/SharedBufferStack(1863): waitForCondition(LockCondition) timed out (identity=157, status=0). CPU may be pegged. trying again.
Каждый раз, когда LogCat показывает GC_FOR_MALLOC или GC_EXTERNAL_ALLOC, приложение зависает с OpenGL в этом условии LockCondition.Похоже, что GC_EXPLICT, по большей части, не вызывает проблем (возможно, это меньшие ресурсы, я не знаю).
В Интернете, кажется, что люди сообщают о таких вещах наТелефоны HTC.Обычно они говорят, что проблема очень спорадическая и ее трудно воспроизвести.Я могу легко воспроизвести его, просто поместив вызов System.gc () в свой поток приложений или выполнив что-то, что выделяет часть памяти, заставляя GC работать.
У меня есть эта проблема в HTC Evo.У моего партнера по разработке другой телефон, и я его не вижу.
Я совершенно не знаю, что делать дальше.Кто-нибудь видел что-то подобное или есть правдоподобное объяснение того, что происходит?Есть ли способ сделать что-то необычное, что мы делаем в приложении?Или это просто ошибка в системе HTC или драйверах?
Спасибо за любую помощь.