文档章节

Activity被回收导致fragment的getActivity为null的解决办法

bluecoffee
 bluecoffee
发布于 2015/06/20 18:44
字数 394
阅读 16432
收藏 24
点赞 5
评论 9

    这两天一直被这个问题困扰,假如app长时间在后台运行,再点击进入会crash,而且fragment页面有重叠现象,让我十分不爽。研究了一天,终于明白其中的原理并加以解决。解决办法如下:

    如果系统内存不足、或者切换横竖屏、或者app长时间在后台运行,Activity都可能会被系统回收,然后Fragment并不会随着Activity的回收而被回收,从而导致,Fragment丢失对应的Activity。

    这里,假设我们继承于FragmentActivity的类为MainActivity,其中用到的Fragment为FragmentA。

    app发生的变化为:某种原因系统回收MainActivity——FragmentA被保存状态未被回收——再次点击app进入——首先加载的是未被回收的FragmentA的页面——由于MainActivity被回收,系统会重启MainActivity,FragmentA也会被再次加载——页面出现混乱,因为一层未回收的FragmentA覆盖在其上面——(假如FragmentA使用到了getActivity()方法)会报空指针,出现crash。

    原理虽然有点绕,但是解决办法很简单:

    MainActivity重写onSaveInstanceState方法,将super.onSaveInstanceState(outState);注释掉,让其不再保存Fragment的状态,达到其随着MainActivity一起被回收的效果

© 著作权归作者所有

共有 人打赏支持
bluecoffee
粉丝 11
博文 69
码字总数 28595
作品 0
秦皇岛
程序员
加载中

评论(9)

杨兵1
谁解释下 未回收的FragmentA在最上面 盖着???
杨兵1
听不懂啊
小团大人
小团大人
真是救命了啊
农民二狗
农民二狗
不好使啊
农民二狗
农民二狗
不还使啊
bobJiao
bobJiao

引用来自“bobJiao”的评论

MainActivity弹出secondActivity,然后压home按钮长时间以后,调出历史应用列表,选择此应用,之后会是个什么情况?MainActivity还存在吗;如果显示的是secondActivity,那么按返回建,MainActivity还在吗,还是要重启?

引用来自“bluecoffee”的评论

secondActivity是个Fragment还是Activity?MainActivity入股没有被回收就会在啊
哦,我用了FragmentTabHost+fragment的方式,home压后台很久之后,再启动app发现只有压home之前的那个fragment显示,tab切到其他的fragment都是一片空白,这是什么原因?
bluecoffee
bluecoffee

引用来自“bobJiao”的评论

MainActivity弹出secondActivity,然后压home按钮长时间以后,调出历史应用列表,选择此应用,之后会是个什么情况?MainActivity还存在吗;如果显示的是secondActivity,那么按返回建,MainActivity还在吗,还是要重启?
secondActivity是个Fragment还是Activity?MainActivity入股没有被回收就会在啊
bobJiao
bobJiao
MainActivity弹出secondActivity,然后压home按钮长时间以后,调出历史应用列表,选择此应用,之后会是个什么情况?MainActivity还存在吗;如果显示的是secondActivity,那么按返回建,MainActivity还在吗,还是要重启?
bobJiao
bobJiao
好使吗?
使用Fragment应用放置后台很久再次进入出现闪退的解决方法

解决办法:在FragmentActivity里oncreate方法判断savedInstanceState==null才生成新Fragment;否则不做处理 @Overrideprotected void onCreate(Bundle savedInstanceState) { if (savedInsta......

莱茵河水怪v241Beta
2015/08/18
0
0
Activity 与 Fragment 之间相互通信

欢迎转载,但请保留文章原始出处→→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4000390.html 联系方式:smyhvae@163.com 【正文】 一、接口回...

iSnowFlake
2015/11/19
0
1
Android 开发大坑汇总(持续更新)

android开发大坑汇总 1.EditText --> gravity与hint冲突 表现在2.X版本当在EditText设置android:gravity="center"属性后,android:hint会无效。 解决办法:再添加android:ellipsize="start"...

JamesQin
2014/08/07
0
0
Android Fragment

Fragment是activity的界面中的一部分或一种行为。你可以把多个Fragment们组合到一个activity中来创建一个多面界面并且你可以在多个activity中重用一个Fragment。你可以把Fragment认为模块化的...

Thanks
2013/01/21
0
2
Android Fragment

Fragment是activity的界面中的一部分或一种行为。你可以把多个Fragment们组合到一个activity中来创建一个多面界面并且你可以在多个activity中重用一个Fragment。你可以把Fragment认为模块化的...

顶层设计
2012/10/26
0
7
android学习笔记之Fragment(三)

写的只是个人的理解,希望有错大神们能指出来。 通过Fragments来构建你的动态Activity布局: 预先构建出模型,like this: <?xml version=”1.0” encoding=”utf-8”?> <LinearLayout xmlns:...

Chanimalx
2013/01/02
0
2
android Fragments详解五:与activity通讯

与activity通讯 尽管fragment的实现是独立于activity的,可以被用于多个activity,但是每个activity所包含的是同一个fragment的不同的实例。 Fragment可以调用getActivity()方法很容易的得到...

晨曦之光
2012/03/12
0
0
Android类参考---Fragment(一)

1. 继承关系 java.lang.Object |android.app.Fragment 实现接口:ComponentCallbacks2 View.OnCreateContextMenuListener 引入版本:API Level 11 已知的子类: DialogFragment、ListFragmen......

长平狐
2012/10/16
399
0
Android Fragment完全解析,关于碎片你所需知道的一切

转载请注明出处:http://blog.csdn.net/guolinblog/article/details/8881711 我们都知道,Android上的界面展示都是通过Activity实现的,Activity实在是太常用了,我相信大家都已经非常熟悉了...

simpower
2014/09/17
0
1
Android Fragment完全解析,关于碎片你所需知道的一切

我们都知道,Android上的界面展示都是通过Activity实现的,Activity实在是太常用了,我相信大家都已经非常熟悉了,这里就不再赘述。 但是Activity也有它的局限性,同样的界面在手机上显示可能...

带梦想一7飞
2013/06/05
0
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

vue基础知识练习

一、Hello World <div id="itany">{{msg}} <!-- 两对大括号{{}}称为模板,用来进行数据的绑定显示在页面中 --> </div><script src="js/vue.js"></script><script>var vm=new Vue({......

一个yuanbeth
6分钟前
0
0
spring @Transactional注解参数详解

原文:事物注解方式: @Transactional 当标于类前时, 标示类中所有方法都进行事物处理 , 例子: 1 @Transactional public class TestServiceBean implements TestService {} 当类中某些方法不需...

binhu
9分钟前
0
0
CORS 跨域实践

本文首发于个人微信公众号《andyqian》,期待你的关注~ 前言 系统通常都是由单体应用逐渐演化而来,演化成为前后端分离的分布式应用。在享受分布式系统带来的诸多好处之时,随之而来的也有不...

andyqian
16分钟前
7
0
开源 java CMS - FreeCMS2.8 会员管理

项目地址:http://www.freeteam.cn/ 会员组管理 会员管理 会员管理 从左侧管理菜单点击会员管理进入。 添加会员 在会员列表下方点击“添加”按钮。 填写相关属性后点击“保存”按钮即可。 编...

freeteam
17分钟前
0
0
bboss升级至 v5.0.6.8版本,改善对Elasticsearch SQL 的支持

v5.0.6.8功能改进如下: (1)持久层支持支持Elasticsearch SQL,使用参考文档:玩转Elasticsearch SQL功能 (2)解决持久层/elasticsearch模板变量解析多层级不起作用问题 (3)完善国际化功能 (4...

linux-tao
18分钟前
0
0
扫码二维码跳转到某个网站

添加maven依赖 <dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.0.0</version></dependency><dependency><groupId>com.goog......

gaomq
25分钟前
0
0
Windows平台下搭建Git服务器的图文教程

Git没有客户端服务器端的概念,但是要共享Git仓库,就需要用到SSH协议(FTP , HTTPS , SFTP等协议也能实现Git共享,此文档不讨论),但是SSH有客户端服务器端,所以在windows下的开发要把自己...

MKChan
31分钟前
0
0
告警系统主脚本&告警系统配置文件&告警系统监控项目

20.20 告警系统主脚本 准备工作 定义监控系统的各个目录,然后再去定义主脚本,因为是分布式的,所以需要每一台机器都需要定义,事先创建好各个脚本和各个目录,随后脚本直接拷贝过去即可,然...

影夜Linux
31分钟前
0
0
谈谈神秘的ES6——(一)初识ECMAScript

谈谈神秘的ES6——(一)初识ECMAScript 在《零基础入门JavaScript》我们就说过,ECMAScript是JavaScript的核心,是JavaScript语法和语义的解释器,同时也是一个标准。而ECMAScript标准其实也...

JandenMa
今天
1
0
第16章 Tomcat配置

16.1 Tomcat介绍 ####Tomcat介绍 LNMP架构针对的开发语言是PHP语言,php 是一门开发web程序非常流行的语言,早些年流行的是asp,在Windows平台上运行的一种编程语言,但安全性差,就网站开发...

Linux学习笔记
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部