Android Kotlin中跳转含多Fragment的Activity时Fragment打开延迟问题
解决Activity跳转延迟、启动缓慢的问题
先验证自定义进度条是否是核心问题
临时替换或注释掉布局里的自定义圆形进度条,换成系统自带的ProgressBar,再测试跳转速度。如果跳转明显流畅,那这个自定义控件就是卡顿的根源,接下来针对性优化:
优化自定义圆形进度条的绘制性能
- 把
onDraw()里的重复计算(比如圆心坐标、半径)移到onSizeChanged()方法中,只在控件尺寸变化时计算一次,避免每次绘制都重复消耗CPU。 - 避免在
onDraw()内创建对象(比如Paint、RectF),把这些对象放到成员变量里初始化,减少内存分配和GC开销。 - 用
postInvalidateOnAnimation()替代invalidate()来触发重绘,让绘制操作和动画帧同步,减少不必要的重绘次数。 - 开启硬件加速:在自定义View的构造函数中添加
setLayerType(LAYER_TYPE_HARDWARE, null),利用GPU分担绘制压力。
同时优化多Fragment的Activity启动逻辑
即使进度条没问题,6个Fragment的初始化也可能拖慢启动速度:
- 开启Fragment懒加载:在NavGraph里给每个Fragment设置
android:launchMode="singleTop",或者利用Jetpack Navigation的懒加载特性,只在用户切换到对应页面时才初始化Fragment。 - 延迟Fragment内的耗时操作:把网络请求、大量数据处理等逻辑从
onCreateView移到onViewCreated之后,用viewLifecycleOwner.lifecycleScope.launch异步执行,不要阻塞UI线程。 - 精简布局层级:用
ConstraintLayout重构布局,减少嵌套层数,降低Measure和Layout阶段的耗时。
内容的提问来源于stack exchange,提问作者Mahnoor199
相关产品推荐
相关产品推荐

