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

使用Navigation组件的Activity启动右滑转场动画卡顿问题咨询

问题排查与解决方案

1. 移除重复导航代码(核心问题)

你在property_navigation中已经将nav_sub_property_purchase配置为起始目的地,NavHostFragment初始化时会自动加载该Fragment,你在onCreate中额外调用navController.navigate()会导致连续两次加载相同Fragment,冗余的布局绘制直接抢占动画渲染的主线程资源,是卡顿的核心诱因。
直接删除onCreate中的以下代码即可:

navController.navigate(R.id.nav_sub_property_purchase)

2. 调整转场动画调用时机

overridePendingTransition不要放在目标Activity的onCreate中,改为在跳转前的Activity调用startActivity()之后立即执行,避免动画启动被Activity初始化流程阻塞:

// 前序Activity的跳转逻辑
startActivity(Intent(this, SecondActivity::class.java))
overridePendingTransition(R.anim.slide_in_right, R.anim.hold)

3. 优化动画参数

当前slide_in_right.xml的平移距离设为300%屏幕宽度,1000ms的时长需要计算更多帧,低端设备极易掉帧。建议修改为符合系统规范的参数:

<?xml version="1.0" encoding="utf-8"?>
<set xmlns:android="http://schemas.android.com/apk/res/android"
    android:shareInterpolator="false">
   <translate
       android:duration="300"
       android:fromXDelta="100%"
       android:toXDelta="0%" />
</set>

4. 替换hold动画为透明主题解决黑屏问题

你使用的hold动画完全是冗余逻辑,要避免启动黑屏,直接给SecondActivity配置透明主题即可,同时可以移除hold动画:
在styles.xml中添加主题:

<style name="TransparentSecondActivityTheme" parent="你的App基础主题">
    <item name="android:windowBackground">@android:color/transparent</item>
    <item name="android:windowIsTranslucent">true</item>
    <item name="android:windowAnimationStyle">@null</item>
</style>

然后在AndroidManifest.xml中给SecondActivity应用该主题。

5. 排查ViewModel耗时操作

检查PropertyViewModel的构造方法、init代码块中是否存在磁盘读写、网络请求、大量数据计算等耗时操作,如有请全部放到子线程/协程非主线程调度器中执行,避免阻塞主线程影响动画渲染。

额外优化建议

如果SubjectPropertyPurchaseFragment布局层级复杂、包含大量图片,可开启硬件加速(主题中添加<item name="android:hardwareAccelerated">true</item>)、用merge标签减少布局层级、压缩图片资源,降低首次绘制的性能压力。


内容的提问来源于stack exchange,提问作者Andrain

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 13:24:07