Fragment  onActivity result无响应
现状及原因如果一个view中创建了一个fragmentfragment主要是为了处理一个拍照组件选择照片后返回的activityresult处理或者其他页面返回后需要在activityresult进行结果处理切记切记最好不要用无UI式的弱引用fragment而是需要拿到这个view的宿主的activity进行OnResult activity处理因为如果使用fragment虽然debug包和包可以正常的接收到毁掉但是对于发板包在比较严格的环境下是我们是收不到fragment的result毁掉因为会被宿主Activity接受而导致view中的fragment activity回调不会被处理。因此在使用的时候注意尽量使用view 的宿主activity或者是用androidx的register的方式来注册毁掉。场景自定义View内部需要接收页面跳转返回结果拍照/选图 ActivityResult ❌ 不推荐方案在View里动态附加一个无UI空白Fragment经典“影子Fragment”方案✅ 推荐方案1拿View宿主Activity用Activity的 registerForActivityResult✅ 推荐方案2使用 androidx.activity.result 的独立注册方式不依赖Fragment影子Fragment原理把Fragment attach到宿主Activity借Fragment的 registerForActivityResult 托管回调。Debug包进程/页面生命周期宽松attach成功回调正常。Release发包严苛ROM/系统限制1. 宿主Activity本身会接管 ActivityResult 分发View动态添加的空白Fragment在某些场景下被系统回收、detach、不纳入result分发链路最终跳转回来影子Fragment收不到回调逻辑丢失。本质Fragment属于Activity的子组件它的result回调依赖Activity的状态和FragmentManager不是稳定可靠的载体尤其View内部动态创建Fragment生命周期和View绑定和Activity/FM生命周期不同步极易踩坑。两种推荐实现方案方案A获取View宿主Activity直接在Activity注册首选拿到View所在Activity由Activity托管 ActivityResultLauncher View只负责触发跳转。kotlin// 在你的自定义View中fun getHostActivity(): Activity? {var context this.contextwhile (context is ContextWrapper) {if (context is Activity) return contextcontext context.baseContext}return null}fun openCamera() {val activity getHostActivity() ?: returnactivity.cameraLauncher.launch(cameraIntent)}缺点需要把launcher定义在ActivityView要和Activity做简单通信优点回调最稳系统原生分发Debug/Release环境行为一致不会出现丢回调。方案BActivityResultRegistry 独立注册推荐解耦Activityandroidx.activity:activity-ktx 提供 ActivityResultRegistry 不需要Activity/Fragment直接使用Registry注册LauncherView内部就可以注册不用影子Fragment。kotlin// 核心从宿主Activity拿到ActivityResultRegistryval registry (context as Activity).activityResultRegistryval launcher registry.register(“photo_pick”, object : ActivityResultContractIntent, ActivityResult() {override fun createIntent(context: Context, input: Intent): Intent inputoverride fun parseResult(resultCode: Int, intent: Intent?): ActivityResult {return ActivityResult(resultCode, intent)}}) { result -// 拍照/选图回调在这里处理}关键点registry属于Activity生命周期跟随Activity注册key photo_pick 需要唯一注意必须在Activity的onCreate之前完成register如果View是动态懒加载创建晚于Activity onCreate会报错。适用不想把拍照逻辑上移到Activity想封装在View内部。避坑要点总结❌ 禁止View内部 new 一个空白无UI Fragment attach用来托管ActivityResult。Release环境高概率丢失回调。✅ 优先把 ActivityResultLauncher 注册在宿主ActivityView只做触发。✅ 备选 ActivityResultRegistry 独立注册不依赖Fragment。Context类型校验获取宿主时注意 context 有可能是 ContextThemeWrapper 不能强转要循环unwrap。内存风险拿到Activity引用时View销毁时注意取消监听防止泄漏。补充为什么很多老代码用影子Fragment旧版Android没有 registerForActivityResult 只能依赖Fragment接收 onActivityResult androidx推出ActivityResultRegistry之后影子Fragment方案已经属于过时方案不适合新项目尤其组件化、自定义View。为何会产生这种现象Debug正常、Release丢回调根源不是分发被抢占而是影子Fragment实例在Release环境下不复存在旧影子Fragment原理把一个看不见的Fragment add到宿主Activity的FragmentManager registerForActivityResult 挂载在这个Fragment实例上。Activity跳转返回后系统/AndroidX的Result分发逻辑找到当初注册Launcher的那个Fragment实例调用回调。Debug包为什么能收到Debug包不开启混淆、不开启严苛的系统内存回收策略App后台不容易被杀页面旋转/重建场景少。​动态add的影子Fragment只要没主动remove实例一直保留在FragmentManager里。​跳转回来分发器能找到这个Fragment实例 → 回调正常执行。Release发版包为什么收不到最常见3个原因① Release开启混淆 FragmentManager状态保存最主要Activity发生重建横竖屏、内存不足系统杀Activity重建时系统会序列化保存FragmentManager状态。我们动态临时add的影子Fragment没有在xml/onCreate静态声明​重建后FM会恢复静态Fragment但不会自动重建你代码里动态new出来的临时影子Fragment​Activity重建完成回到页面触发ActivityResult分发注册Launcher的那个旧Fragment实例已经销毁新页面里没有这个实例 → 找不到回调直接丢弃。 不是宿主Activity拿到了回调是没人能匹配上这个注册的Launcher回调直接丢失。② Release ROM/系统后台管控更强Release包系统对App内存管控更严格。App退后台时更容易被裁剪组件Debug包系统会放宽限制保留更多对象。③ 混淆可能把影子Fragment类名抹除如果没给这个空白Fragment加 -keep 混淆规则Release混淆后类名改变FM状态恢复的时候无法实例化Fragment直接丢失。

相关新闻

路由器学习笔记

路由器学习笔记

路由器: crtlbreak进入rommon 1> 输入confreg 0x2142 然后reset重启>en #write erase --删除配置,然后按enter #conf t (config)#config-register 0x2102(no system ignore startup switch all) (config)#end #wr me --重启,然后no,然后enteren…

2026/9/24 3:46:44 阅读更多 →
AI陪伴机器人生产部署清单-从云服务器到稳定运行

AI陪伴机器人生产部署清单-从云服务器到稳定运行

10-生产部署清单-从云服务器到稳定运行系列:AI 伙伴(AI-Partner)——具身智能陪伴机器人 数据接口部署与二次开发篇(10/12)一、先说结论:这套 Demo 距离生产差几步 AI 伙伴(AI-Partner&#xf…

2026/9/24 3:45:44 阅读更多 →
all-in-rag 食谱知识库实战:以一份简易红烧肉菜谱为例的数据准备全流程解析

all-in-rag 食谱知识库实战:以一份简易红烧肉菜谱为例的数据准备全流程解析

教程人工智能大模型RAG 【免费下载链接】all-in-rag 🔍大模型应用开发实战一:RAG 技术全栈指南,在线阅读地址:https://datawhalechina.github.io/all-in-rag/ 项目地址: https://gitcode.com/datawhalechina/all-in-ra…

2026/9/24 3:45:44 阅读更多 →

最新新闻

WorkBuddy能给企业带来什么?从AI工具到业务智能体

WorkBuddy能给企业带来什么?从AI工具到业务智能体

很多公司现在已经在用 AI 了。但你去问员工“平时怎么用”,答案通常都差不多。写个方案的时候让 AI 帮忙改一下,开完会把录音或者文字丢进去整理纪要,销售写客户邮件时让 AI 润色几句。财务手里有一张乱七八糟的 Excel,也可能先让…

2026/9/24 4:29:14 阅读更多 →
为什么Jev诞生在OpenAI之外:System One模型与RLHF的隐藏代价

为什么Jev诞生在OpenAI之外:System One模型与RLHF的隐藏代价

Diogo Almeida(迭戈阿尔梅达)这周过得并不轻松。作为TypeSafe的联合创始人兼CEO,他刚刚发布了Jev——一个在整条时间线上刷屏的产品,而他自己形容当下的状态是"情绪上从未这么糟过",像一具被各种突发状况拖垮…

2026/9/24 4:29:14 阅读更多 →
鼎讯信通G-4000B光缆路由追踪仪的手机远程操作解析

鼎讯信通G-4000B光缆路由追踪仪的手机远程操作解析

在光缆故障追踪中,一个常见的尴尬是:仪表在机房或井口,人却在另一端敲击光缆,两边沟通全靠对讲机,效率低还容易出错。鼎讯光缆路由追踪仪G-4000B针对这个痛点,加入了手机APP远程控制功能,让单人…

2026/9/24 4:29:14 阅读更多 →
小米数字系列迎来史上最大升级,卢伟冰:AI全面改造智能手机的开始

小米数字系列迎来史上最大升级,卢伟冰:AI全面改造智能手机的开始

9月23日,小米秋季新品发布会在北京举行。小米18 Pro、小米18 Pro Max正式发布,性能、屏幕、背屏、影像等全面升级;小米平板9系列、小米手环11、小米手表S5以及多款科技家电新品同步亮相。小米18 Pro系列带来多项产品创新。全系搭载超级像素2.…

2026/9/24 4:29:13 阅读更多 →
人声音色怎么克隆

人声音色怎么克隆

如果需要统一视频中同一角色的跨片段声线,或是为旁白配置指定音色,可以借助专业剪辑工具的音色克隆功能完成处理。目前剪映专业版已支持基础的音色克隆与角色音色配置功能,处理前需要确认你使用的音色样本已获得合法授权,本文将基…

2026/9/24 4:29:13 阅读更多 →
LPC2388实战指南:AMBA总线与ARM7嵌入式开发深度解析

LPC2388实战指南:AMBA总线与ARM7嵌入式开发深度解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/24 4:28:13 阅读更多 →

日新闻

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:19 阅读更多 →
单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:19 阅读更多 →
C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/24 0:00:19 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/23 4:55:02 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/23 4:49:06 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/23 9:53:41 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/23 9:53:40 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/23 9:53:40 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/23 9:53:40 阅读更多 →