Android开发 关于navigation destination xxx is unknown to this NavController 报错的复现分析与解决

Posted 观心静

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android开发 关于navigation destination xxx is unknown to this NavController 报错的复现分析与解决相关的知识,希望对你有一定的参考价值。

问题描述

  在我们使用按键点击触发  Navigation.findNavController(getView()).navigate(R.id.action_aFragment_to_bFragment);  代码跳转到另一个碎片时,在很低的概率下会出现这个 navigation destination xxx is unknown to this NavController 报错问题。这个问题的意思是在启动Fragment的时候,它需要启动的Fragment不存在。

问题原因

  原因很简单,你没有在在点击里做防止连点的机制。 特别是设备在很卡的情况下。 连点会导致多次跳转Fragment,而Navigation启动的Fragment只有一个实例,而连点导致极端短时间内同时启动Fragment,会一些点击并没有Fragment来启动。

复现问题

  你可能会不相信我上面的问题原因说明,因为一般设备在正常的情况下你很难触发这个bug。只有在设备很卡的时候才会出现,我们为了复现这个问题只需要下面这条命令创建一个设备很卡的环境:

adb shell dd if=/dev/zero of=/storage/sdcard0/file bs=1073741824 count=10

这个命令会让设备生成一个占用文件,让设备剩余空间被占满。注意,并不是真正使用了存储空间。然后你只需要在启动Navigation.findNavController(getView()).navigate() 的按键里连点多次就可以触发这个报错了

解决问题办法

做一个防止连点的机制即可,参考我的博客:https://www.cnblogs.com/guanxinjing/p/10905850.html

以上是关于Android开发 关于navigation destination xxx is unknown to this NavController 报错的复现分析与解决的主要内容,如果未能解决你的问题,请参考以下文章

Android开发 navigation入门详解

Android Jetpack之Navigation源码分析

Android 开发之Navigation Drawer

「Android高级开发」10年老程序员经验谈:navigation入门详解

「Android高级开发」10年老程序员经验谈:navigation入门详解

android开发:底部导航条的实现 | navigation tab