Android Camera2:onCaptureProgressed与onCaptureCompleted回调差异及"partial result"含义咨询
Android Camera2:onCaptureProgressed与onCaptureCompleted的区别及Partial Result详解
嘿,这个问题问到点子上了!我当初搞Camera2开发的时候,也对着这俩回调懵了好一阵,今天给你把它俩的区别和partial result的含义讲得明明白白~
一、两个回调的核心差异
1. 触发时机完全不同
onCaptureCompleted是Capture请求彻底结束时才会触发的“最终通知”。不管是拍照、预览还是其他Capture任务,只有当所有相关的图像数据、元数据都生成完毕,整个Capture流程走完,才会调用这个回调。比如你拍一张照片,当全尺寸JPEG文件完全生成、所有拍摄参数都确认无误时,它才会来报到。onCaptureProgressed则是Capture过程中的阶段性反馈,属于“中途报进度”。它不会等整个Capture结束,只要有部分结果可以用了,就会立刻通知你。比如拍照时相机刚完成对焦锁定,或者曝光参数计算完毕,这时候它就会跳出来告诉你当前的状态。
2. 返回的结果内容天差地别
onCaptureCompleted返回的是完整的最终结果:包含这次Capture的所有元数据(对焦状态、曝光值、闪光灯状态等等),以及你请求的所有图像输出(比如全分辨率照片、YUV原始数据)。拿到这个回调里的数据,你就可以直接用来保存、展示或者做后续处理了。onCaptureProgressed返回的是Partial Result(部分结果):通常只有部分元数据,或者低分辨率的预览图像,绝对不会包含完整的最终输出。比如它可能只告诉你“对焦已锁定”,或者给你一个小尺寸的缩略预览图,让你提前知道拍摄的大致效果,但最终的高清照片还得等onCaptureCompleted。
二、Partial Result到底是什么?
Partial Result直译就是“部分结果”,它是Camera2在处理Capture请求时,提前输出的阶段性数据,核心作用是让你在任务完成前就能获取关键信息,做实时交互反馈:
- 举个实际场景:你打开相机拍照,当相机完成自动对焦后,会通过
onCaptureProgressed发送一个partial result,你就可以在UI上显示“对焦成功”的图标;接着曝光参数计算完成,又会发送一个partial result,你可以实时更新屏幕上的曝光数值,让用户直观看到当前的拍摄参数。 - 要触发partial result,你得在构建
CaptureRequest时,把CONTROL_ENABLE_PARTIAL_RESULTS参数设置为true——默认情况下相机是不会主动发送partial result的。 - 注意:不同设备、不同场景下,
onCaptureProgressed的触发次数可能不一样,不要固定依赖它的调用次数;而且partial result里的数据是不完整的,绝对不能用它来替代onCaptureCompleted的最终结果做保存或核心处理。
内容的提问来源于stack exchange,提问作者STG




