Живые обои для Android: waitForCondition (ReallocateCondition) - PullRequest
0 голосов
/ 02 апреля 2010

Я разрабатывал живые обои, используя 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, я не вижу ничего очевидного.

1 Ответ

1 голос
/ 16 августа 2010

У меня была похожая проблема. Ошибка была в том, что мне нужно было вызвать unlockCanvasAndPost:

        Canvas c = null;
    **try {**
            c = holder.lockCanvas(null);
            synchronized (holder) {
                instance.doDraw(c);
            }
        **} finally {
            // do this in a finally so that if an exception is thrown
            // during the above, we don't leave the Surface in an
            // inconsistent state
            if (c != null) {
                holder.unlockCanvasAndPost(c);
            }
        }**         
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...