Kotlin中Android页面跳转延迟:含6个Fragment的Activity启动缓慢
问题场景
从当前Activity跳转至ItemDetailActivity时出现明显延迟,目标Activity启动缓慢。该目标Activity使用NavHost管理6个Fragment,跳转代码如下:
{ val intent = Intent(requireActivity(), ItemDetailActivity::class.java) intent.putExtra(Constants.SelectedBoardIds, gson.toJson(listOfBoardIds)) intent.putExtra(Constants.projectId, gson.toJson(idOfProject)) intent.putExtra(Constants.projectList, gson.toJson(mutableListOfBoard)) intent.putExtra(Constants.kanban, gson.toJson(item)) val options = ActivityOptions.makeCustomAnimation( requireActivity(), R.anim.slide_from_right, R.anim.no_anim ) startActivity(intent,options.toBundle()) }
延迟产生的核心原因
- 大体积数据的序列化/反序列化耗时:你通过Intent传递了多组数据,其中
mutableListOfBoard这类集合可能包含大量元素,用Gson转成JSON字符串的序列化过程会占用大量CPU资源;同时目标Activity启动后还需要反序列化这些数据才能使用,这两步直接拉长了启动前的准备时间。Intent Extra设计初衷是传递轻量数据,不适合传输复杂或大容量集合。 - NavHost关联Fragment的初始化开销:
- 默认情况下NavHost会自动加载导航图的起始Fragment,如果该Fragment的
onCreateView、onViewCreated中存在耗时操作(比如同步网络请求、大量本地数据库查询、复杂UI渲染),会直接拖慢Activity启动速度。 - 部分场景下,框架可能会提前实例化其他关联的Fragment(比如预加载),6个Fragment的初始化叠加会进一步增加启动时的资源消耗。
- 默认情况下NavHost会自动加载导航图的起始Fragment,如果该Fragment的
- 复杂布局的渲染压力:如果6个Fragment对应的XML布局嵌套层级深、包含大量自定义View或重绘逻辑,哪怕Fragment未显示,布局解析和初始化过程也会占用大量内存和CPU,导致Activity启动延迟。
- 资源竞争放大延迟感知:自定义动画的执行需要CPU资源,而此时CPU已被数据序列化、Fragment初始化占满,动画卡顿会让你对启动延迟的感知更明显。
内容的提问来源于stack exchange,提问作者Mahnoor199
相关产品推荐
相关产品推荐

