No view found for id 0x7f0901c3 for fragment解决以及线上bug排查技巧
情景再现
开发这么久,不知道你们是否也经历过这样的情况,测试或者用户,反馈app闪退,结果你自己打开开发工具,去调试,一切正常,然后闪退还是存在,只是在开发环境中不能重现。这种情况一般是在特定的情况下才触发的bug。比如app退出后台,再打开的时候,重启了,这样你在开发环境很难模拟到。那这种bug怎么来排查的,两种办法:
集成bugly
bugly是个很好的工具,
腾讯Bugly,为移动开发者提供专业的异常上报和运营统计,帮助开发者快速发现并解决异常,同时掌握产品运营动态,及时跟进用户反馈。
具体怎样集成自行百度。集成以后,可以查看到很多开发环境看不到的bug,这样就根据崩溃记录,对app进行完善。
bug重现
虽然bugly能看到日志,但是怎么才能重现呢,毕竟不重现,没办法解决bug,能重现的bug,其实是最好解决的Bug。对于一些bug,可能加一些判断非空就行了,但是有些bug,比较难重现,比如
No view found for id 0x7f0901c3 (包名:id/frameLayout) for fragment MergedModuleNoLoginFragment{acdaeec} (156480ac-26ef-4bdc-8ec6-ae57f092d97f id=0x7f0901c3)
包名.UI.onStart(UI.java:75)
这个bug困扰了我好久,开发环境始终重现不了,加了try-catch也不行,然后网上的方法都试了,也不行。这个bug的原因就是一句话:调用的时机不对,还没初始化完成,就切换了。这个bug一般会在fragment嵌套fragment的代码里出现。现在将解决办法说一下
开发环境重现bug
其实一些bug,正常情况下是重现不了的,我们可以通过设置开发者选项里的不保留活动,调试的时候,正常进入页面,然后点击home键,回到桌面,再点击图标,就有可能重现一些Bug
我这边的bug解决,是将切换fragment的方法,放在onCreate()方法里,有可能view还没初始化,就调用了,会报错
@Overrideprotected void onStart() {super.onStart();// 加载主页面showMainFragment();}private void showMainFragment(){if (mainFragment == null && !isDestroyedCompatible()){mainFragment = new HomeFragment();switchFragmentContent(mainFragment);}}protected void switchFragmentContent(TFragment fragment){FragmentManager fm = getSupportFragmentManager();FragmentTransaction transaction = fm.beginTransaction();transaction.replace(fragment.getContainerId(), fragment);try{transaction.commitNowAllowingStateLoss();}catch (Exception e){e.printStackTrace();}}
报错的代码是MainFragment里的子fragment切换
@Overridepublic View onCreateView(LayoutInflater inflater, ViewGroup container,Bundle savedInstanceState) {View view = inflater.inflate(R.layout.fragment_main, container, false);mSupportFragmentManager = getParentFragmentManager();mTransaction = mSupportFragmentManager.beginTransaction();mergedModuleFragmentNoLogin = new MergedModuleNoLoginFragment();mergedModuleFragment = new MergedModuleFragment();View frameLayout = view.findViewById(R.id.frameLayout);if (frameLayout != null) {if (!Contants.DOCTOR_LOGIN) {mTransaction.add(R.id.frameLayout, mergedModuleFragmentNoLogin);} else {mTransaction.add(R.id.frameLayout, mergedModuleFragment);}mTransaction.commitAllowingStateLoss();}return view;}
mTransaction.add(R.id.frameLayout, mergedModuleFragment);
报错,找不到R.id.frameLayout。放到了onStart()方法里就可以了
关于这个Bug,网上有一些博客,我把筛选过,感觉有用的博客分享一下
Fragment找不到资源Id引起的线上Crash
从一个线上 Android Bug 回看 Fragment
java.lang.IllegalArgumentException No view found for id 0x7
java.lang.IllegalArgumentException No view found for id 0x… for fragment
Fragment嵌套fragment出现的两种错误No view found for id for fragment 与Can not perform this action after onSave
java.lang.IllegalArgumentException: No view found for id 崩溃总结
关于No view found for id 0x7f080135 (com.xxx.xxx:id/viewpager) for fragment PopupWindow
遇到的错误之java.lang.IllegalArgumentException: No view found for id
Android之 运行时错误总结
相关文章:

No view found for id 0x7f0901c3 for fragment解决以及线上bug排查技巧
情景再现 开发这么久,不知道你们是否也经历过这样的情况,测试或者用户,反馈app闪退,结果你自己打开开发工具,去调试,一切正常,然后闪退还是存在,只是在开发环境中不能重现。这种情况…...

腾讯云CVM服务器竞价实例是什么?和按量计费有什么区别?
腾讯云服务器CVM计费模式分为包年包月、按量计费和竞价实例,什么是竞价实例?竞价实例和按量付费相类似,优势是价格更划算,缺点是云服务器实例有被自动释放风险,腾讯云服务器网来详细说下什么是竞价实例?以及…...

Kali Linux助您网络安全攻防实战
Kali Linux:黑客与防御者的神器 Kali Linux是一款专为网络安全测试和攻防实践而设计的操作系统。它汇集了大量的安全工具,可以用于渗透测试、漏洞扫描、密码破解等任务,不仅为黑客提供了强大的攻击能力,也为安全防御者提供了测试和…...

JavaEE初阶:多线程 - 编程
1.认识线程 我们在之前认识了什么是多进程,今天我们来了解线程。 一个线程就是一个 "执行流". 每个线程之间都可以按照顺讯执行自己的代码. 多个线程之间 "同时" 执行 着多份代码. 引入进程这个概念,主要是为了解决并发编程这样的…...

一种多策略下RabbitMQ的延时队列实现
1.为什么会用到延时队列? 场景: 最近在开发一款系统中遇到这样一个场景,A系统开通套餐需要把套餐信息以邮件的形式发送给相关工作人员,经过人工审核通过后,在B系统里面开通,A系统会调B系统套餐列表接口查询套餐是否开通成功,开通成功则从A系统去完成订单,假如超过设定时间未开…...

解密 AI 客服;在不同硬件设备上运行大型语言模型的可能性
🦉 AI新闻 🚀 微软必应首席执行官称必应聊天优于OpenAI的GPT-4,但成本更高 摘要:微软必应的首席执行官米哈伊尔・帕拉欣表示,必应聊天表现优于OpenAI的GPT-4,但使用了更高成本的检索增强推理技术。必应聊…...

问题:【IntelliJ IDEA】解决idea自动声明变量加finall修饰符问题
问题:【IntelliJ IDEA】解决idea自动声明变量加finall修饰符问题 场景复现 1 new String() 2 快捷方式生成变量 final修饰的 final String s new String();步骤一:确保settings配置信息 settings-----》Editor------》Code Style--------》java下的这两个选项不…...

SpringBoot基于Zookeeper实现分布式锁
文章目录 问题背景前言实现搭建Zookeeper容器引入依赖ZK客户端的配置类ZK客户端的工厂类注入bean构建测试类 问题背景 研究分布式锁,基于ZK实现,需要整合到SpringBoot使用 前言 参考自SpringBoot集成Curator实现Zookeeper基本操作,Zookeeper入…...

AT89C51单片机实现单片机串口互动(中断方式,单片机--单片机,应答)
说一下功能:客户机发送0x01到服务机 2服务单片机应答0xf2到客户机 3客户机接收到0xf2,发送信息153432这6个数字到服务机 4client发送完信息后发送0xaa结束通信 5server接收到0xaa后回复0xaa结束通信,从此老死不相往来 看代码: //发送端…...

九耶丨阁瑞钛伦特-请说说你在工作中的PRD文档是如何撰写的?
1、背景说明(解释清楚为什么要做这样一件事,以及做这件事的价值,先把观点拉齐,才方便接下来的工作开展) 简要介绍与项目相关的背景信息、项目要满足的用户需求、开展项目的主要原因、项目期望上线时间、项目涉及的具体…...

Android免打包多渠道统计如何实现
摘要: 实际上只要完成1-2步即可实现多渠道打包,这也意味着,只要每次更新App时给出一个原始包,运营人员就能在后台自己进行操作管理,简单快捷到全程无需开发人员参与。 我们都知道,Android 市场被分割成几十…...

Apipost CICD怎么配置?
配置CI/CD Apipost自动化测试新增CI/CD,配置运行环境、循环次数、间隔停顿后点击保存会生成命令,在安装Apipost的服务器中输入命令即可运行测试脚本。 自动化测试 创建自动化测试脚本在创建好的测试用例中选择「CICD」,点击新建,…...
utf-8和utf-8 mb4区别
UTF-8(Unicode Transformation Format-8)和UTF-8MB4(UTF-8 Multibyte 4-byte)是字符编码方案,用于表示 Unicode 字符集中的字符。它们之间的主要区别在于编码范围。 UTF-8:UTF-8 是一种变长编码方式&#x…...

考研 408 | 【计算机网络】 应用层
导图 网络应用模型 客户/服务器(c/s)模型 P2P模型 DNS 域名 域名服务器 域名解析过程 文件传输协议FTP FTP服务器和用户端 FTP工作原理 电子邮件 电子邮件的信息格式 组成结构 邮件服务器的功能: 1.发送&接收邮件 2.给发件人报告邮…...
设计模式-单例
概述 在类加载后,整个系统只有一个实例类 饿汉式 public class Mg1 {private static final Mg1 INSTANCE new Mg1();private Mg1(){}public static Mg1 getInstance(){return INSTANCE;}public static void main(String[] args) {System.out.println(Mg1.getIns…...
mysql截取最后一个字符之前的数据
1、mysql截取最后一个字符之前的数据 select --截取斜杠之前的数据REVERSE(SUBSTR(REVERSE(SPNH-dfg-2012) ; --截取斜杠后的数据 INSTR(REVERSE(SPNH-fg-2012),-)1))2、mysql获取最后一个字符后的数据 select SUBSTRING_INDEX(SPNH-dfg-2012,-,-1) 3、mysql更新某个字段…...
Flutter 中,ListView 中需要放置 ListView 需要怎么处理才高效?
问题及场景 ListView 是 Flutter 开发者第一个学习到的 Widget,因为它可以滑动。一切都会运行得很好,直到 ListView 中的 Item 本身也是一个 ListView。你可能会看到 Flutter 建议你将内部的 ListView 的ShrinkWrap 属性设置为 True。虽然错误消除了&am…...

Appium Desktop安装
【提示:官方已不再维护,建议命令行方式安装,但可以学习了解一下】 Appium Desktop是一款适用于Mac、Windows和Linux的应用程序,它以漂亮灵活的UI为您提供Appium自动化服务器的强大功能。它基本上是Appium Server的图形界面。您可…...

Open3D 最小二乘拟合平面(SVD分解法)
目录 一、算法原理二、代码实现三、结果展示1、点云2、拟合结果四、优秀博客本文由CSDN点云侠原创,原文链接。爬虫网站自重。 一、算法原理 本文实现矩阵奇异值分解方法的最小二乘拟合平面。原理如下: 对于得到的 n n...

Pytorch源码搜索与分析
PyTorch的的代码主要由C10、ATen、torch三大部分组成的。其中: C10 C10,来自于Caffe Tensor Library的缩写。这里存放的都是最基础的Tensor库的代码,可以运行在服务端和移动端。PyTorch目前正在将代码从ATen/core目录下迁移到C10中。C10的代…...

6年“豹变”,vivo S30系列引领手机进入场景“体验定义”时代
出品 | 何玺 排版 | 叶媛 5月29日晚,备受用户期待的vivo S30系列如约而至。 相比前几代S系列产品,S30系列变化显著,堪称“豹变”。首先,其产品打造思路发生了质变,产品体验更好,综合竞争力更为强。其次&a…...

向量空间的练习题目
1.考虑 中的向量x1 和x2 求每一向量的长度 令x3x1x2,求x3的长度,它的长度与x1和x2的和有什么关系? 2.重复练习1,取向量 3.令C为复数集合,定义C上的加法为 (abi)(cdi)(ac)(bd)i 并定义标量乘法为对所有实数a (abi) a bi 证明&…...

相机--相机标定
教程 内外参公式及讲解 相机标定分类 相机标定分为内参标定和外参标定。 相机成像原理 相机成像畸变 链接 四个坐标系的转变 内参标定 内参 相机内参通常用一个 33 矩阵(内参矩阵,KK)表示,形式如下: (1)焦距&…...

用dayjs解析时间戳,我被提了bug
引言 前几天开发中突然接到测试提的一个 Bug,说我的时间组件显示异常。 我很诧异,这里初始化数据是后端返回的,我什么也没改,这bug提给我干啥。我去问后端:“这数据是不是有问题?”。后端答:“…...
new语法
在C中,new 是用于动态内存分配的操作符,允许在运行时请求内存空间。以下是 new 的完整语法和用法说明: 1. 基本语法 1.1 单一对象分配 type* pointer new type(initializer);作用:分配一个 type 类型的对象,并返回…...

ubuntu安装devkitPro
建议开个魔法 wget https://apt.devkitpro.org/install-devkitpro-pacman chmod x ./install-devkitpro-pacman sudo ./install-devkitpro-pacman(下面这句如果报错也没事) sudo ln -s /proc/self/mounts /etc/mtab往~.bashrc添加 export DEVKITPRO/o…...

高密爆炸警钟长鸣:AI为化工安全戴上“智能护盾”
一、高密爆炸:一声巨响,撕开化工安全“伤疤” 2025年5月27日,山东高密友道化学有限公司的车间爆炸声,像一把利刃划破了化工行业的平静。剧烈的冲击波将车间夷为平地,黑色蘑菇云腾空而起,刺鼻的化学气味弥漫…...
Redis 常用数据类型和命令使用
目录 1 string 2 hash 3 list 4 set集合 5 zset有序集合 1 string 值可以是字符串、数字和二进制的value,值最大不能超过512MB 应用场景: 应用程序缓存 计数器 web共享session 限速 1.1 设置单个键值 set <key> value [EX seconds|PX…...

基于SpringBoot+Redis实现RabbitMQ幂等性设计,解决MQ重复消费问题
解决MQ重复消费问题 一、实现方案 本方案参考 「RabbitMQ消息可靠性深度解析|从零构建高可靠消息系统的实战指南」,向开源致敬! 1、业务层幂等处理: 每个消息携带一个全局唯一ID,在业务处理过程中,首先检查…...
鸿蒙5.0+ 多协议设备发现与分布式软总线技术实践
一、技术演进与架构升级 1.1 多协议发现机制演进 鸿蒙5.0重构设备发现层,支持三模异构发现: 经典蓝牙(BLE 5.2):低功耗设备发现Wi-Fi Aware:高带宽设备预连接PLC࿰…...