Android应用REST API重复调用排查:主界面非首次加载缓慢
问题:主界面非首次加载耗时过长,REST API被多次调用
问题背景
主界面除首次加载外,其余加载耗时都很长,Logcat显示加载数据的REST API被多次调用。
已排查的原因
- 怀疑存在循环代码,观察数据时修改变量意外触发数据重新加载,但通过CPU Profiler分析,数据从父Fragment到子Fragment的流转正常。
- 怀疑多个Fragment实例调用API:
- 在Fragment的Observer中添加日志代码:
reportGroupVM.selectedReport.observe(viewLifecycleOwner, Observer { binding.tvTitle.text = it.title LogUtil.d("EnergyConsumptionFrag", this@EnergyConsumptionFragment.toString()) energyConsumptionVM.getSpecificReport(it.entityLinkContainer?.self?.href) }) - 日志输出显示存在多个不同ID的Fragment实例:
2023-09-22 21:27:21.180 6992-6992 EnergyConsumptionFrag dev.packagename D EnergyConsumptionFragment{49abc22} (ab026b8f-bfe8-4587-8d4b-d451e46bea13) id=0x7f0a0211 EnergyConsumptionFragment} 2023-09-22 21:27:21.195 6992-6992 EnergyConsumptionFrag dev.packagename D EnergyConsumptionFragment{b12d8ca} (7a6776a6-824a-45d6-af2c-8c17207c1a43) id=0x7f0a0211 EnergyConsumptionFragment} 2023-09-22 21:27:21.210 6992-6992 EnergyConsumptionFrag dev.packagename D EnergyConsumptionFragment{96a67d1} (6f4d5392-8971-4906-9af7-94b5bf9df8fb) id=0x7f0a0211 EnergyConsumptionFragment} 2023-09-22 21:27:21.225 6992-6992 EnergyConsumptionFrag dev.packagename D EnergyConsumptionFragment{ff4a010} (45c24f6f-3ed6-4a75-ab08-d46f08523775) id=0x7f0a0211 EnergyConsumptionFragment} - 生成该Fragment的唯一代码位置:
这段代码逻辑看似无问题。loadFragment(EnergyConsumptionFragment()) private fun loadFragment(fragment: Fragment) { val transaction = childFragmentManager.beginTransaction() if (!fragment.isAdded) { transaction.add(R.id.layout_report, fragment, fragment.javaClass.simpleName) } else { //transaction.replace(R.id.layout_report, fragment, fragment.javaClass.simpleName) } transaction.commit() }
- 在Fragment的Observer中添加日志代码:
提问
还有哪些可能的原因需要排查?该如何调试这个问题?
内容的提问来源于stack exchange,提问作者ryannmahajan
相关产品推荐
相关产品推荐

