首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PowerManager和PARTIAL_WAKE_LOCK行为

PowerManager和PARTIAL_WAKE_LOCK行为
EN

Stack Overflow用户
提问于 2014-01-14 10:27:43
回答 1查看 1K关注 0票数 0

我用警报器定时拍照。我使用的BroadcastReceiver如下所示:

代码语言:javascript
复制
@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回调结束的例程之前,设备返回其备用模式?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-01-14 11:19:48

您的设置是错误的,因为您不应该在接收器中做很多事情,而且AlarmManageronReceive()运行时持有一个唤醒锁-是的,您不应该在编辑时释放唤醒。您应该委托一个服务,由于详细的这里原因,这必须是一个WakefulIntentService。现在,在该服务中,您应该设置一个等待处理完成的机制--可能使用CountDownLatch。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21111157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档