针对illegalstateException OnloadFinished

Android onLoadFinished与onLoaderReset回调详解及实例 主要介绍了Android onLoadFinished与onLoaderReset回调详解及实例的相关资料,需要的朋友可以参考下 立即下载

Here is some background to help anyone who encounters this exception.

The exception is thrown because the framework doesn't allow to commit a fragment transaction in the same call stack as onLoadFinished(). This behavior provides a protection against state lose, because loaders are normally based on background threads (AsyncTaskLoader) which can finish their work and notify back anytime.

There could be two potential issues: 1. The framework already saved the state (for example because of orientation change) of the fragments in the fragment manager when the call to onLoadFinished() is performed. Committing a transaction in this context will result in state lose because this late transaction is not included in the saved state. 2. The framework has not finished restoring from a previous saved state. Here, the transaction comes too early before the state has been restored.

There are two problems with Maria's answer above: 1. calling runOnUiThread() doesn't help because onLoadFinished() is called on the UI thread which means the call to runOnUiThread() will be called in the same call stack which will raise the exception. The documentation says: "If the current thread is the UI thread, then the action is executed immediately." 2. Even if the call (here DialogFragment.show()) hadn't been done in the same call stack) for example by:

public void onLoadFinished(Loader<Map<String, Integer>> arg0,
                            Map<String, Integer> result) {
    if (result == null) {

        new Handler().post(new Runnable() {
            @Override
            public void run() {
                netEMessage();
            }
        });
    } 
}

the risks above would still exist.

The best solution to this issue is to move the fragment transaction to a different place in the flow while ensuring issues 1. and 2. above cannot happen. For example, performing the transaction from Activity.onPostResume().

Good luck!


Unity透明视频播放全攻略:AVPro Video插件实战与避坑指南 在游戏开发与交互式内容创作中,视频播放是常见的多媒体需求。其核心原理在于通过解码器将压缩的视频数据流转换为连续的图像帧,再经由图形API渲染至屏幕。这项技术的价值在于能够高效地呈现动态视觉内容,广泛应用于游戏过场动画、UI特效、AR/VR虚拟展示等场景。当需求进阶到需要背景透明的视频时,技术实现复杂度显著增加,这涉及到对视频Alpha通道的编码、解码与渲染管线的特殊处理。本文聚焦于Unity引擎中实现高质量透明视频播放的工程实践,深入解析了AVPro Video这一专业插件如何解决原生VideoPlayer 阅读详情

相关推荐

当FPGA遇上Codesys:用Verilog实现ModbusTCP协议栈的3种方法(Xilinx/Vivado实测)

本文详细介绍了在Xilinx FPGA上使用Verilog实现Modbus TCP协议栈的三种方法,并与Codesys环境无缝集成。从基础架构设计到纯Verilog实现、基于AXI总线的混合方案,再到与Codesys的集成方法,为开发者提供了完整的工业自动化通信解决方案。通过实测数据对比,帮助开发者选择最优实现方案。

weixin_29172963的博客 522

Android Loader 机制

1 Loader介绍 Loader是Android3.0提供的新的异步api,Loader可用于进行异步操作,其实它内部采用的也是类似AsycnTask的异步任务机制,那么既然有了AsyncTask为什么还要有Loader呢?因为AysncTask有一个缺点,当Activity或者Fragment因为为屏幕旋转等因素被销毁重建后,如果处理不当就会造成任务和数据丢失,每次重建都要重新启动一个Asy...

静虚待令,有物混成 2101

果蔬及菜品识别系统

果蔬及菜品识别系统

我的博客 2118

android reset方法,Android onLoadFinished与onLoaderReset回调详解及实例

Android onLoadFinished与onLoaderReset回调详解及实例onLoadFinished这个方法是在前面已创建的加载器已经完成其加载过程后被调用,这个方法保证会在应用到加载器上的数据被释放之前被调用。在此方法中,你必须删除所有对旧数据的使用(因为它将很快会被删除),但是不要自己去释放它们,因为它们的加载器会做这些事情。加载器一旦了解到应用不再使用数据时,将马上释放这些数据...

weixin_36455001的博客 309

MySQL安装最后启动报错--Job for mysqld.service failed because the control process exited with error code. See

MySQL安装最后启动报错: [root@localhost mysql]# systemctl start mysqld Warning: mysqld.service changed on disk. Run 'systemctl daemon-reload' to reload units. Job for mysqld.service failed because the control process exited with error code. See "systemctl status m

chenchen的博客 2746

063.CI/CD for ML:给YOLO项目装上自动化流水线

本文分享了为YOLO目标检测项目搭建CI/CD流水线的实践经验。作者通过手动调试模型导出问题的经历,意识到重复验证工作比模型改进更耗时,提出需要自动化解决方案。文章详细介绍了四阶段流水线设计:1)代码质量检查;2)快速训练验证;3)推理性能基准测试;4)模型注册部署。同时总结了环境不一致、GPU资源争抢等常见问题及解决方案,建议从简单规则开始逐步完善,强调模型版本管理的重要性。实施后不仅提高了效率,还促使团队形成更规范的开发习惯。

2603_95664987的博客 235

安卓进阶(13)之离奇bug

PS:此贴会持续更新,记录我平时遇到的比较坑爹的bug LoaderManager.LoaderCallbacks 前提: 数据源从始至终都没有变化! 问题: 当我的compileSdkVersion为27及以下时,onLoadFinished()只会调用一次,但是当我的compileSdkVersion为28时,从其他页面返回到已实现LoaderManager.LoaderCallbacks接口...

罗小辉的专栏 493

数学与纳米技术:微观世界的数学描述

《数学与纳米技术:微观世界的数学描述》 关键词:纳米技术、数学模型、微观世界、物理现象、计算模拟 摘要:本文探讨了数学在纳米技术领域的应用,从数学基础回顾、纳米技术引论,到物理现象与

AI天才研究院 1532

Android onLoadFinished与onLoaderReset

onLoadFinished 这个方法是在前面已创建的加载器已经完成其加载过程后被调用,这个方法保证会在应用到加载器上的数据被释放之前被调用。在此方法中,你必须删除所有对旧数据的使用(因为它将很快会被删除),但是不要自己去释放它们,因为它们的加载器会做这些事情。 加载器一旦了解到应用不再使用数据时,将马上释放这些数据。例如,如果数据是一个从CursorLoader来的游标,你不应调用游标的cl...

weixin_34364135的博客 407

南 京 农 业 大 学 试 题 纸 附表(rape.csv)是25个油菜材料,测得每个材料的千粒重、亚油酸等的含量. (1) 对物质含量的八个指标作主成分分析,画出碎石图和主成分得分图; (2) 选

(1)请用n1

Mrrunsen的博客 498

代谢组数据分析(五):代谢组的功能富集分析

本文介绍了代谢组数据分析中的功能分析,包括代谢物富集分析、GSEA和ssGSEA方法。文章详细阐述了分析原理、应用背景、数据准备、统计方法以及结果解释,强调了在代谢通路和代谢物ID对应关系建立、差异代谢物筛选、富集程度计算等方面的关键步骤。通过这些方法,可以揭示差异代谢物在生物过程中的作用,为疾病研究和药物开发提供依据。

专注生信领域 5981

LruCache报错IllegalStateException

描述 定义LruCache: LruCache cache = new LruCache<String, List<?>>(maxSize){ @Override protected int sizeOf(String key, List<?> value){ return EmptyUtil.isEmpty(value) ? 1 : value.siz...

BIGGGFISH的博客 1612

RK3588 Buildroot 新建板级DTS

在rk3588 linux开发过程中,新创建板型主要基于硬件差异化、软件适配与优化、项目定制化等多方面需求。

501846585_QQAndroid_java 1298

在学习过程中总结的LoaderManager的LoaderCallbacks刷新数据以使onLoadFinished回调方法能被执行的两种方式

在学习过程中总结的LoaderManager的LoaderCallbacks刷新数据以使onLoadFinished回调方法能被执行的两种方式

Hardor的博客 4152

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

LoaderManager使用详解(二)---了解LoaderManager

了解LoaderManager 这篇文章将介绍LoaderManager类,这是该系列的第二篇文章。 一:Loaders之前世界 二:了解LoaderManager 三:实现Loaders 四:实例:AppListLoader 注意: 要了解这一LoaderManager这部分知识,要求对Loaders如何工作有基本了解。Loaders的实

DODO~下雨不打伞 3万+

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

在学习过程中总结的LoaderManager的LoaderCallbacks刷新数据以使onLoadFinished回调方法能被执行的两种方式...

第一种: 在用ContentResolver更新数据后,调用loaderManager的restartLoader(0,null,this)方法,以此来重新执行onCreateLoader()方法进而执行onLoadFinished方法。 第二种: 在ContentProvider中的insert、update、delete中在返回之前...

dianchange8716的博客 498

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Android Loader机制

Loader以及LoaderManager是Android Framework中异步加载各种数据(不限于Cursor)的标准机制。Loader是加载器,它完成实际的数据加载工作。LoaderManager是Loader的管理者,其管理着一个或多个Loader的生命周期。LoaderManger有两个方法我们会经常用到:initLoader()方法和restartLoader()方法。initLoader:通过调用LoaderManagr的initLoader()方法,可以创建一个Loader。 restar

xiaowang_lj的博客 691

Android基础--Android Loader详解

装载器从android3.0开始引进。它使得在activity或fragment中异步加载数据变得简单。装载器具有如下特性: 它们对每个Activity和Fragment都有效。 他们提供了异步加载数据的能力。 它们监视数据源的一将一动并在内容改变时传送新的结果。 当由于配置改变而被重新创建后,它们自动重连到上一个加载器的游标,所以不必重新查询数据。装载器API概述在使用装载器时,会涉及很多

JKerving的博客 640

org.apache.catalina.connector.ResponseFacade.sendRedirect错误处理

出错现象: 严重: Servlet.service() for servlet Login threw exception java.lang.IllegalStateException  at org.apache.catalina.connector.ResponseFacade.sendRedirect(ResponseFacade.java:435)  at com.toget

kkliu201210的专栏 3627

Android Loader详解四:回调及完整例子

onLoadFinished 这个方法是在前面已创建的装载器已经完成其加载过程后被调用.这个方法保证会在应用到装载器上的数据被释放之前被调用.在此方法中,你必须删除所有对旧数据的使用(因为它将很快会被删除),但是不要自己去释放它们,因为它们的装载器会做这些事情. 装载器一旦了解到应用不再使用数据时,将马上释放这些数据.例如,如果数据是一个从CursorLoader来的游标,你不应调用游标的

Hunter的专栏 791

Android LoadManager无法回调onLoadFinish问题

前言 Android LoadManager是3.0之后引入的,现在都8.0了,项目中可以不用考虑低版本的适配,完全可以使用,我项目中用的比较多,近期发现,LoadManager 有时无法回调onLoadFinish的方法. 解决方法 重载onStartLoading方法 加入forceLoad()(意思是强制执行)强制执行该回调方法 package co

托米每天美滋滋 1800

Android按back后执行过程,android – onLoadFinished从HOME按钮返回后没有调用

在查看问题14944(http://code.google.com/p/android/issues/detail?id=14944)之后,我通过在我的自定义AsyncTaskLoader中重写onStartLoading()并调用forceLoad()来解决了这个问题.更好的解决方案是创建一个看起来像这样的自定义父AsyncTaskLoader(取自上面链接中alexvem的建议):public...

weixin_29027285的博客 223
上一篇: 启动zygote
下一篇: 源码之ListView分析
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值