Мое приложение прекрасно работает, когда устройство подключено к источнику питания, тогда как он не работает (время от времени), когда устройство отключено от сети. Я думаю, что часть кода, отвечающего этой проблемы заключается в следующем: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 или устройство остается в рабочем режиме некоторое время?
Большое спасибо за любые комментарии.
Спасибо @CommonsWare за ваш добрый ответ. Проблема в том, что я не знаю, когда заканчивается takePicture(). Единственное решение, которое я вижу, это вызов 'wl.release()' в конце обратного вызова takePicture, но это грязное решение, так как я не нашел ясного механизма доступа wl из обратного вызова takePicture. У тебя есть какой-нибудь совет? – user2923045
@ user2923045: «Проблема в том, что я не знаю, когда takePicture() заканчивается» - ваш 'PictureCallback' вызывается с' onPictureTaken() '. «поскольку я не вижу ясного механизма доступа к wl из обратного вызова takePicture», используйте экземпляр своей реализации PictureCallback для экземпляра 'WakeLock'. – CommonsWare