Я разрабатывал живые обои, используя GLWallpaperService, и в целом получил хорошие результаты. Он отлично работает в эмуляторе и выглядит хорошо. Я уже много раз имел дело с OpenGL, так что у меня есть четкая команда того, как что-то делать ... к сожалению, у меня чертовски непросто добиться того, чтобы это стало действительно стабильным на реальном оборудовании.
Основная проблема возникает, когда вы несколько раз двигаете физическую клавиатуру на Motorola Droid. Это приводит к тому, что обои разрушаются / воссоздаются несколько раз в быстрой последовательности - это было бы хорошо, так как мои активы очищаются в onDestroy и перезагружаются в onSurfaceChanged. Проблема в том, что после нескольких итераций этого (четыре или пять, может быть), вызовы onSurfaceChanged полностью прекращаются, и я получаю бесконечную строку этого в журнале:
04-02 00: 53: 18.088: WARN / SharedBufferStack (1032): истекло время ожидания waitForCondition (ReallocateCondition) (идентификатор = 337, статус = 0). Процессор может быть привязан. пытаясь снова.
Есть ли что-то, что я должен реализовать здесь, кроме типичного для Android триумвирата onSurfaceCreated / onSurfaceChanged / onSurfaceDestroyed? Просматривая классы WallpaperService и WallpaperRenderer, я не вижу ничего очевидного.