В моем проекте будет запущен еще один поток в сервисе. Чтобы избежать приостановки этого потока при приостановке устройства, я получил 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
Кто-нибудь встречал эту проблему раньше? Или любое предложение для меня приветствуется.