2014-01-17 2 views
0

Мое приложение прекрасно работает, когда устройство подключено к источнику питания, тогда как он не работает (время от времени), когда устройство отключено от сети. Я думаю, что часть кода, отвечающего этой проблемы заключается в следующем:PowerManager и PARTIAL_WAKE_LOCK

PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE); 
    PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "foo"); 
    wl.acquire(); 
foo(); 
    wl.release(); 

foo() это функция, которая вызывает Camera.takePicture(), что, как вы знаете, приводит к параллельной задаче, которая занимает несколько секунд, чтобы закончить. Таким образом, wl.release() фактически вызывается, когда изображение еще не принято. Вышеупомянутый код выполняется с помощью будильника, который выдает устройство из своего режима ожидания. Мой вопрос: существует ли риск того, что устройство вернется в режим ожидания до того, как будет снято изображение из-за того, что wl.release может быть вызван до того, как будет сделан снимок? Вызывает ли wl.release() мгновенно PARTIAL_WAKE_LOCK или устройство остается в рабочем режиме некоторое время?

Большое спасибо за любые комментарии.

ответ

0

Вопрос: существует ли риск того, что устройство вернется в режим ожидания до того, как будет снято изображение из-за того, что wl.release может быть вызван до того, как будет снята фотография?

Да.

ли wl.release() выпуск мгновенно PARTIAL_WAKE_LOCK

Да.

или устройство остается в рабочем режиме на некоторое время?

Это зависит от того, что еще может содержать WakeLock.

+0

Спасибо @CommonsWare за ваш добрый ответ. Проблема в том, что я не знаю, когда заканчивается takePicture(). Единственное решение, которое я вижу, это вызов 'wl.release()' в конце обратного вызова takePicture, но это грязное решение, так как я не нашел ясного механизма доступа wl из обратного вызова takePicture. У тебя есть какой-нибудь совет? – user2923045

+0

@ user2923045: «Проблема в том, что я не знаю, когда takePicture() заканчивается» - ваш 'PictureCallback' вызывается с' onPictureTaken() '. «поскольку я не вижу ясного механизма доступа к wl из обратного вызова takePicture», используйте экземпляр своей реализации PictureCallback для экземпляра 'WakeLock'. – CommonsWare

 Смежные вопросы

  • Нет связанных вопросов^_^