我使用闹钟定期拍照。我使用BroadcastReceiver如下:
@Override
public void onReceive(Context context, Intent intent)
{
Log.d(TAG, "Capturing pic");
PowerManager pm = (PowerManager) context.getSystemService(Context.POWER_SERVICE);
PowerManager.WakeLock wl = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, "CAPPIC");
wl.acquire();
capturePicture();
wl.release();
}
capturePicture()
调用Camera.takePicture(...)
然后结束。最后,如您所见,wl.release()
被调用。
现在,问题是takePicture
的回调在我的情况下非常耗时。实际上,它会对刚刚拍摄的照片执行一些操作,这可能需要5秒才能完成。
我的问题是,因为在调用takePicture回调的计算密集型任务时调用wl.release()
,是否有任何副作用?也就是说,假设设备处于待机模式。闹钟开始 - >唤醒锁被激活 - >图片被采取和操纵,但同时计算唤醒锁被释放...是安全的还是设备在进入takePicture回调的例程结束之前返回待机模式的风险?
答案 0 :(得分:2)
您的设置错误,因为您不应该在接收器中做很多事情,并且AlarmManager
持有唤醒锁,onReceive()
无论如何运行 - 是的编辑时不应该释放唤醒锁。您应该委托服务,并且由于详细原因here,这必须是WakefulIntentService。现在,在该服务中,您应该设置一个等待处理完成的机制 - 可能使用CountDownLatch。