Activity被回收导致fragment的getActivity为空

 在编写含有Fragment代码的时候,经常会遇到这种情况,假如app长时间在后台运行,再点击进入会crash,而且fragment页面有重叠的现象。

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

这里,假设我们我们含有一个MainActivity里面包含了一个FramentA。

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

这种情况下,我们可以这样解决:

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

时间: 2024-10-27 02:41:17

Activity被回收导致fragment的getActivity为空的相关文章

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

这两天一直被这个问题困扰,假如app长时间在后台运行,再点击进入会crash,而且fragment页面有重叠现象,让我十分不爽.研究了一天,终于明白其中的原理并加以解决.解决办法如下: 如果系统内存不足.或者切换横竖屏.或者app长时间在后台运行,Activity都可能会被系统回收,然后Fragment并不会随着Activity的回收而被回收,从而导致,Fragment丢失对应的Activity. 这里,假设我们继承于FragmentActivity的类为MainActivity,其中用到的Fr

Android开发中如何实现外部其他Activity类与指定fragment碎片的相互跳转

先说一下这个问题产生的背景 Activity A中有四个fragment,分别是 a b c d,默认显示的是fragment a.在开发过程中,fragment d中需要和外部Activity进行跳转,将这个外部Activity命名为B吧... 我需要从d中跳转到B中,完成一些设置,然后再从B中的返回按钮回到d.但是使用startActivity()方法的结果是:可以实现从d到B的跳转,但是从B跳到d出现了问题. 网上搜索了一下相关问题的解决方案(博文) 方案一: 要考虑fragment的复用

fragment与activity及两个fragment之间的跳转实现

在近期的练手项目中,我们使用到了Android Fragment技术.在应用的交互中,我可能需要实现: 从当前的fragment跳转到另一个fragment 从当前的fragment跳转到一个activity中 从当前的activity跳转到一个fragment中 网上提供的思路较多,这里总结了一套自己的方法. 一.从当前的fragment跳转到另一个fragment 1.在相应fragment全局中声明fragment管理对象及事务对象. // Fragment管理对象 private Fra

到底是 Activity 被回收了还是进程被杀死了?

不管是安卓的官方文档还是源码注释,处处可见"从 Activity A 跳到 Activity B,当系统内存不足时 A 可能会被回收--",而且没有明确说明 A 和 B 是否属于同一个 app 或进程. 但是,在官方给的 Activity 生命周期图中,却说内存不足时低优先级的进程将被杀死. 那么,内存不足时,到底是 Activity 被回收了呢,还是进程被杀死了呢,还是二者都出现了呢? 答案是,Activity 被回收了,而且进程被杀死了,而且该进程是后台进程. 默认情况下,一个 a

Android 管理多个fragment(处理Activity被回收的情况)

做了好久的项目,由于进度赶,也没怎么闲心来写博客.不过项目赶是赶,也不是一口就能吞掉的,要慢慢来.既然慢慢来,就抽出点时间来写点什么.在项目里遇到好几个棘手的问题.有几个是被我解决掉.其中一个就是多个fragment的管理问题.只能说我是android的新手,也没怎么系统学习android,所以有些东西,只能在项目里摸索,要用到哪个就学哪个,还好我还大概知道哪些该在哪用,哪些该是被学. 情景一:一个Activity中使用多个fragment,以tab的形式来点击切换fragment.一共用到了4

Activity传递参数到Fragment

今天下午纠结了一天,如何把参数传递到Fragment,其实网上很多资料, getActivity().getIntent().getStringExtra(getString(R.string.bloger)); 大多是上面的方法.由于我的实际情况比较特殊,导致不能直接用上面的方法. 我的Fragment attach的Activity的启动方式为singleTask,也就是说,从其他activity跳转到该activity是不会重新实例化,通过getIntent()方法也不能获取到传递过来的参

Android内存重启之静态变量被回收导致nullPoint问题

通常我称系统为了维持当前app运行稳定而进行内存清场动作导致后台app被强制清理的情况成为内存重启. 那么内存重启会导致的一个问题就是app被杀掉之后对应的静态变量也会被同时清理掉.那么怎么解决这个问题呢. 据我研究可以使用这么几个方法: 方法一: //activity销毁之前保存配置信息,防止静态变量数据丢失 @Override protected void onSaveInstanceState(Bundle outState) { super.onSaveInstanceState(out

解决android应用被强杀或应用被回收导致的空指针问题

1.问题是如何发生的,会在什么情况下发生此类问题? 当用户运用手机清理助手或后台回收我们的应用造成我们应用程序进程被杀死的时候就有可能出现这种空指针的问题,下面举个例子我们一起来看看这种情况是如何发生的. 如图所示我们新建一个程序Demo,程序中有三个Activity,分别为SplashActivity MainActivity InfoActivity,下面我们简称这三个Activity为A B C.这三个Activity也是模拟我们平时项目的进入流程,SplashActivity也就是我们的

Activity嵌套多个Fragment实现横竖屏切换

一.上图 二.需求 近期项目遇到个横竖屏切换的问题,较为复杂,在此记之. 1.Activity中竖屏嵌套3个Fragment,本文简称竖屏FP1,FP2,FP3. 2.其中竖屏FP1与FP2可以切换为横屏的FL1,FL2,即竖屏FP1切换到对应的横屏FL1,竖屏FP2对应切换到横屏FL2. 3.FP3不允许横竖屏切换. 4.竖屏FP1,FP2,FP3用ViewPager实现左右滑动切换. 5.横屏的FL1,FL2用布局中的切换按扭实现左右切换,不允许滑动切换. 看到这需求有点儿晕菜了吧!!!呵呵