You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Android使用Container Transform退出应用后视图残留问题求解

该问题是由于MainActivity在共享元素转场未完成时就提前销毁,导致系统转场渲染缓存没有正确释放,退出应用时就会出现视图残留。你可以通过以下方式修复:

方案1:推迟MainActivity销毁时机

移除startActivity后立即调用的finish(),改为监听共享元素退出转场完成后再销毁页面,修改后的MainActivity#onCreate代码如下:

window.requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS)
setExitSharedElementCallback(MaterialContainerTransformSharedElementCallback())
// 监听转场完成后销毁页面
window.sharedElementExitTransition?.addListener(object : Transition.TransitionListener {
    override fun onTransitionEnd(transition: Transition) {
        finish()
        transition.removeListener(this)
    }
    override fun onTransitionCancel(transition: Transition) {
        finish()
        transition.removeListener(this)
    }
    override fun onTransitionStart(transition: Transition) {}
    override fun onTransitionPause(transition: Transition) {}
    override fun onTransitionResume(transition: Transition) {}
})
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
val icon: View = findViewById(R.id.icon)
icon.postDelayed({
    val intent = Intent(this, NextActivity::class.java)
    val options = ActivityOptions.makeSceneTransitionAnimation(
        this,
        icon,
        "splash"
    )
    startActivity(intent, options.toBundle())
    // 删除原来此处的finish()调用
}, 300)

方案2:配置NextActivity退出转场

给NextActivity添加退出转场规则,避免退到桌面时触发异常渲染,修改后的NextActivity#onCreate代码如下:

window.requestFeature(Window.FEATURE_ACTIVITY_TRANSITIONS)
setEnterSharedElementCallback(MaterialContainerTransformSharedElementCallback())
// 禁用不需要的共享元素回退转场,设置退出淡入动画
window.sharedElementReturnTransition = null
window.exitTransition = Fade()
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_next)

方案3:定制ROM兼容处理

一加等深度定制ROM对系统动画有额外修改,可在退出NextActivity时主动隐藏页面内容,规避残留问题:

override fun onBackPressed() {
    // 退到桌面时先隐藏根布局
    findViewById<View>(android.R.id.content).alpha = 0f
    super.onBackPressed()
}

可选校验项

检查你的Activity使用的主题是否配置了正确的转场开关:

<style name="AppTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
    <item name="android:windowActivityTransitions">true</item>
    <item name="android:windowIsTranslucent">false</item>
</style>

内容的提问来源于stack exchange,提问作者Lee Chun Hoe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 14:54:03