我用警报器定时拍照。我使用的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秒。
我的问题是,既然wl.release()是在takePicture回调中的计算密集型任务运行时调用的,那么有什么副作用吗?也就是说,假设设备处于待机模式。警报启动->唤醒被激活->图片被拍摄和操纵,但在计算的同时,唤醒被释放…这是安全的,还是有风险,在进入takePicture回调结束的例程之前,设备返回其备用模式?
发布于 2014-01-14 11:19:48
您的设置是错误的,因为您不应该在接收器中做很多事情,而且AlarmManager在onReceive()运行时持有一个唤醒锁-是的,您不应该在编辑时释放唤醒。您应该委托一个服务,由于详细的这里原因,这必须是一个WakefulIntentService。现在,在该服务中,您应该设置一个等待处理完成的机制--可能使用CountDownLatch。
https://stackoverflow.com/questions/21111157
复制相似问题