WakeLock.acquire занимает много времени на Samsung Galaxy SII LTE

В моем проекте будет запущен еще один поток в сервисе. Чтобы избежать приостановки этого потока при приостановке устройства, я получил WakeLock перед запуском этого потока и освободил этот WakeLock после завершения этого потока. Иногда этот вызов API (WakeLock.acquire) занимает слишком много времени, более 4 минут на Samsung Galaxy SII LTE.

Ниже мой код: В сервисе onStartCommand получите блокировку пробуждения:

    if (mWakeLock == null) {
        final PowerManager pm = (PowerManager)getSystemService(Context.POWER_SERVICE);
        mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "Eca Engine");
        mWakeLock.setReferenceCounted(false);
    }
    if (!mWakeLock.isHeld()) {
        Log.d(TAG, "Before acquire");
        mWakeLock.acquire();
        Log.d(TAG, "After acquire");
    }
    ......        

В потоке снимите блокировку пробуждения:

    if (mWakeLock != null && mWakeLock.isHeld()) {
        mWakeLock.release();
    }

журнал: «После приобретения» напечатано после «До получения» в течение 4 минут.

Информация о тестовом устройстве: Номер модели: Sc-03d Версия Android: 2.3.6 Базовая версия: 3c03domlb9 Версия ядра: 2.6.35.11 - 3c03domlb9 980106 se.infra@sep-53#2 Номер сборки: пряник omlb9

Кто-нибудь встречал эту проблему раньше? Или любое предложение для меня приветствуется.


person Marina Ma    schedule 30.07.2012    source источник


Ответы (1)


Я исправил эту проблему. Я отправляю команду в основной поток, чтобы он снял блокировку пробуждения, а не освобождал ее непосредственно в новом потоке. Тогда эта проблема больше не может воспроизводиться.

Кто-нибудь понимает первопричину? Почему мы не можем получить блокировку пробуждения в основном потоке службы и снять ее в другом потоке, даже если мы работаем с одним и тем же объектом WakeLock.

person Marina Ma    schedule 03.08.2012
comment
К сожалению, эта проблема повторилась. Я проверил на устройстве Sharp, этого не происходит. Эта проблема возникает только на устройстве Samsung Galaxy SII. - person Marina Ma; 08.08.2012