使用Fragment应用放置后台很久再次进入出现闪退的解决方法

解决办法:在FragmentActivity里oncreate方法判断savedInstanceState==null才生成新Fragment;否则不做处理

    @Override
    public void onCreate(Bundle savedInstanceState) {
        if (savedInstanceState != null) {
            savedInstanceState.putParcelable("android:support:fragments",null);
    }
    super.onCreate(savedInstanceState);
        context = (BaseActivity) getActivity();
    }

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

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

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

系统通过FragmentActivity调用onSaveInstanceState保存Fragment对象,这时候系统恢复保存的Fragment,但是在FragmentActivity重新执行生命周期的时候,我们重新生成了fragment对象附加到该FragmentActivity,系统恢复的Fragment和Activity失去关联,出错;

所以,在FragmentActivity里oncreate方法判断savedInstanceState==null才生成新Fragment;否则不做处理。

时间: 2024-08-23 23:38:27

使用Fragment应用放置后台很久再次进入出现闪退的解决方法的相关文章

使用Fragment应用放置后台很久,被系统回收,出现crash

使用Fragment应用放置后台很久,被系统回收,出现crash:原因:系统做了源码FragmentActivity调用onSaveInstanceState保存Fragment对象,这时候系统恢复保存的Fragment,但是在FragmentActivity重新执行生命周期的时候,我们重新生成了fragment对象附加到该FragmentActivity,系统恢复的fragment和activity失去关联,出错:处理:方法1.在fragmentActivity里oncreate方法判断sav

后台章编辑器可视区域没有显示样式的解决方法

使用后台文章编辑器的时候,会当自定义class样式在style.css时, 我们在文章编辑器加入class时,发现样式并没有显示出来, 只有当在预览页面时才能看到样式. 解决方法: 在对应的主题下的functions.php下添加以下代码: // 指定editor-style.css为编辑器CSS add_editor_style('./style.css', '1.0' ); 此时文章编辑器的可视区域会加载style.css 原文地址:https://www.cnblogs.com/ryanz

iOS 后台退出app时不执行applicationWillTerminate的临时解决方法

- (void)applicationDidEnterBackground:(UIApplication *)application { // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in

phpcms后台在线编辑模板禁止含有{php标签编辑的解决方法

1.开启后台在线编辑模板功能 找到caches\configs\system.php文件,找到'tpl_edit'=> 0, 系统默认是0,开启在线编辑模板功能只需把0改成1 2.phpcms禁止含有{php标签的编辑,修改两个文件 一个文件是phpcms/modules/template/file.php 将$code = str_replace(array('<?','{php'),array('<?','{ php'),$code);          //注释掉 另一个文件是ph

类型的已垃圾回收委托进行了回调。这可能会导致应用程序崩溃、损坏和数据丢失。向非托管代码传递委托时,托管应用程序必须让这些委托保持活动状态,直到确信不会再次调用它们的问题的解决方法 续集

接上文 今天突然发现键盘控制不行了,结果还是那个问题搞的鬼,原以为解决了,但是紧接着问题又来了,汗颜啊,将钩子封装成dll 前台调用实例如下 CHW.HookHelper hook;  //钩子 <span style="font-family:Microsoft YaHei;font-size:18px;"><span style="font-family:Microsoft YaHei;font-size:18px;">private v

后台数据为空因此程序闪退

2016-06-13 10:27:49.781 TheBeeWorld[346:48482] -[__NSCFString singer]: unrecognized selector sent to instance 0x14e8d5cb0 2016-06-13 10:27:49.783 TheBeeWorld[346:48482] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reaso

多个Fragment界面重叠和拍照闪退问题

记录最近遇到的多个Fragment界面重叠和调用系统相机拍照闪退问题,同时总结解决方案. ---------------------------------------------------------------------------------------------------------------------------------------------------------------- 环境:Activity(一个)+Fragment(多个) 问题一:多个fragment出

Android fragment 重叠问题——通过hide,show方式导致的解决方法

最近在做项目的时候,遇到了fragment重叠的问题.具体的情况是,我在一个fragment中,通过add的到FragmentTransaction的方式,又放了四个子fragment allFrg,movieFrg,newsFrg,otherFrg.当我点击allFrg对应tab键时,通过hide隐藏其他三个fragment,通过show来显示allFrg.正常情况下显示是对的,问题就在我切换他其他的app,操作一会之后,再回到当前的app,有很大几率会出现fragment重叠的现象. 通过搜

linux如何再次运行那个很久之前曾用过的命令---历史命令搜索方法

linux shell命令一般附带很多参数,如果你现在想运行一个很久之前用过的命令,但当时用的参数怎么也技艺不起来了,怎么办?如果用上箭头向前翻动会累死驴的吆!万能的linux真是太方便了,一行命令搞定: $history | grep 命令名字参数等你能记忆到的字符串