返回事件与预测性返回 · AndroidX 源码指南
AAndroidX 源码指南
Activity
应用基础 · androidx.activity

返回事件与预测性返回1.14.0-alpha01

理解 OnBackPressedDispatcher、BackHandler 与 PredictiveBackHandler 的职责。

最后更新 2026-07-31

普通返回

OnBackPressedDispatcher 保存可启用的 callback,并把返回事件交给当前有效处理者。Compose 的 BackHandler 是这套分发器的组合封装。

BackHandler(enabled = draft.isNotEmpty()) {
    draft = ""
}

只有确实需要拦截时才启用,否则事件应继续交给导航层或 Activity 默认处理。

预测性返回

PredictiveBackHandler 的回调接收 Flow<BackEventCompat>。手势进行时收集 progress 驱动预览;收集正常结束时提交返回;收到协程取消则恢复界面。

PredictiveBackHandler(enabled = canPop) { events ->
    preparePreview()
    try {
        events.collect { updatePreview(it.progress) }
        pop()
    } catch (cancelled: CancellationException) {
        cancelPreview()
    }
}

普通 BackHandler 只处理“发生了返回”;预测性版本还要处理开始、进度、提交和取消,所以动画状态必须可逆。