Android 使用Headless Fragment 处理Configuration Changes情况

2023-05-16


Android开发中,AsyncTask是最常用的异步方法,功能结构设计的也很丰富,给使用者足够的控制。因此对于一些较短的(1,2秒),CPU密集计算或读写文件等阻塞IO操作我们一般会选择使用AsyncTask。

在使用AsyncTask的时候,我们会遇到一些有关于Activity生命周期的问题。

Activity可能早于AsyncTask执行完被销毁,如果AsyncTask还继续执行,有可能会浪费资源,并且如果AsyncTask里引用了Activity或部分的View Hierarchy,还会造成引用的对象不会被垃圾回收而引起内存泄漏。通常AsyncTask会定义为Activity的一个匿名内部类,这会建立一个隐式的引用到Activity。一般的解决办法是在Activity的onPause方法里取消不需要再执行的AsyncTask,但是如果频繁的切换横竖屏,这样就会有点浪费了。比较好的办法就是使用Worker Fragment来保留活动对象。

通常情况下,当Fragment的父Activity发生Configuration Changes的情况时,Fragment也会被destroyed,然后执行recreate。我们可以在Fragment的onCreate方法里添加 setRetainInstance(true);来使Fragment绕过onDestroy 和 recreate的生命周期,告诉系统当Activity recreated的时候保留Fragment的当前instance。代码如下:

<span style="font-family:Microsoft YaHei;"> @Override
  public void onCreate(Bundle savedInstanceState) {
    if (DEBUG) Log.i(TAG, "onCreate(Bundle)");
    super.onCreate(savedInstanceState);
    setRetainInstance(true);
  }
</span>
从而可以看出使用Fragment来持有正在运行的线程,AsyncTasks,套接字对象非常有用。


下面给出一个老外写的example链接。

https://github.com/alexjlockwood/worker-fragments

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Android 使用Headless Fragment 处理Configuration Changes情况 的相关文章

随机推荐

  • C#:如何查看.net core版本?

    C xff1a 如何查看 net core版本 xff1f 打开控制面板 xff0c 选择 程序和功能 xff0c 找到下图选项 xff0c 即可查看 net core版本 检查是否已正确安装所有内容 xff1a 安装完成后 xff0c 打
  • Qt信号槽如何传递参数

    Qt信号槽如何传递参数 利用 Qt 进行程序开发时 xff0c 有时需要信号 槽来完成参数传递 带参数的信号 槽在使用时 xff0c 有几点需要注意的地方 xff0c 下面结合实例进行介绍 1 当信号与槽函数的参数数量相同时 xff0c 它
  • 解决 zsh: command not found 报错

    问题描述 最近在开发 Go 项目 xff0c 使用 go get u xxxx 成功下载安装包后 xff0c 在终端执行新下载包的命令 xff0c 一直报 zsh command not found 的错误 一开始以为是包没安装成功 xff
  • Ubuntu 安装scipy错误解决办法

    在ubuntu 14 04使用pip3 install scipy时报错 xff1a numpy distutils system info NotFoundError no lapack blas resources found 百度了一
  • LA5016-IIC EEPROM协议解析

    写入 LA5016 解析协议设置 xff1a 波形 读取 波形 xff1a
  • Linux下安装oracle数据库提示DISPLAY not set. Please set the DISPLAY and try again.解决方法

    问题描述 xff1a Linux下安装oracle数据库提示DISPLAY not set Please set the DISPLAY and try again 如下图所示 xff1a 解决办法 xff1a 切换到root 用户 xff
  • html 清除缓存样式

    autocomplete 61 off
  • ArcGIS Server for linux 服务无法启动解决简记

    今天在一台Linux虚拟机上安装了一个ArcGIS Server For Linux 只ArcSOC 组件 xff0c 一切正常 xff0c 但是启动服务的时候报一下的错误 xff1a root 64 rhsde scripts start
  • Java中swap()方法的实现

    为了能更多的掌握C C 43 43 xff0c 时不时的就会拿起一本什么书看看 昨天又看到了请指针和引用的部分 xff0c 又会有经典的swap 方法的实现 几乎所有人都知道了 xff0c 要实现一个正确的swap 方法需要以指针或引用为参
  • 渐变色原理

    引用 http www islandcn com post 311 html 在图象图形的编程中 经常会见到渐变色以及各种图片的叠加等效果 这篇文章就是要对这些效果的原理加以分析 并在Elastos 操作系统 Mobile Edition
  • JAX-WS 学习二:创建客户端

    上一节中介绍了怎么基于JAX WS的API创建服务端 xff0c 这一节介绍一下创建一个客户端调用WebService服务 要创建一个Client端也相当简单 xff0c 不过需要知道几个东西 xff1a 1 wsdl文件路径 需要读取服务
  • 使用JDI监听Java程序运行

    Java虚拟机提供了一套用于调试 xff08 JVMDI xff09 和监视 xff08 JVMPI xff09 的接口 xff0c Java5之后统一为JVMTI xff1a http docs oracle com javase 1 5
  • 使用CXF和camel-cxf调用webservice

    CXF是什么 Apache CXF 是一个开源的 全功能的WebService框架 xff0c 它提供了一套工具和API来帮助开发和构建WebService xff0c 像 JAX WS 和 JAX RS 它也支持许多WebService标
  • Java国际化:BreakIterator

    译自 xff1a http tutorials jenkov com java internationalization breakiterator html xff0c 不准确别怪我 java text BreakIterator 类用来
  • build-helper-maven-plugin的使用

    build helper maven plugin 插件主要的作用就是用来指定额外的源码路径和资源路径 它总共有15个goal xff1a build helper add source Add more source directorie
  • tkinter进阶版——ttk

    很长的一段时间里 xff0c 我都是用tkinter进行GUI设计的 xff0c 还写过一篇 tkinter模块常用参数 但后来慢慢地觉得 xff0c 这个tkinter真的是有点丑啊 于是 xff0c 找到了现在的ttk ttk是什么呢
  • Spring 参考资料

    拦截器顺序参考 xff1a http www cnblogs com yjmyzz p how to custom filter provider and token in spring security3 html Spring框架详细参
  • 自定义Spring MVC中的数据绑定

    默认情况下 xff0c spring mvc的数据映射的实现是自动查找请求中的key为参数名的parameter的值 比如有以下方法 xff1a 64 RequestMapping value 61 34 xml 34 method 61
  • 微信分享实现

    本文简单的介绍在微信里打开某个网站 xff0c 希望在点击 分享到朋友圈 或 发送给朋友 时 xff0c 自定义分享的内容 xff0c 即使用 JS SDK 实现分享功能 1 前提 要想分享成功 xff0c 需要申请一个公共号 xff0c
  • Android 使用Headless Fragment 处理Configuration Changes情况

    Android开发中 xff0c AsyncTask是最常用的异步方法 xff0c 功能结构设计的也很丰富 xff0c 给使用者足够的控制 因此对于一些较短的 xff08 1 xff0c 2秒 xff09 xff0c CPU密集计算或读写文