0

我用闹钟定时拍照。我使用广播接收器如下:

@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 回调结束?

4

1 回答 1

2

您的设置是错误的,因为您不应该在接收器中做很多事情,并且无论如何运行AlarmManager时都会持有唤醒锁- 是的,您不应该在编辑时释放唤醒锁。您应该委托给服务,并且出于此处详述的原因,这必须是WakefulIntentService。现在在该服务中,您应该设置一个等待处理完成的机制 - 可能使用 CountDownLatch。onReceive()

于 2014-01-14T11:19:48.760 回答