解决APP进程被杀掉之后,导致fragment失效或者错乱的办法

activity被杀掉之后,它会通过如下方法把数据缓存下来

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
}

当再次进入activity时,系统会从savedInstanceState中回复数据,但是我们从activity启动时,会重新初始化FragmentTransaction,相当于再次add fragment,会导致hide()和show()方法失效,下面有两种解决方法:

 

方法一、在onCreate时,如果savedInstanceState不为空,则我们从savedInstanceState里面拿到保存的fragment,而不再对fragment重新初始化,具体代码如下

@Override
public void onCreate(Bundle savedInstanceState) {
    mManager = getSupportFragmentManager();
    if (savedInstanceState != null) {
        mMainFragment = (MainFragment) mManager.findFragmentByTag("mMainFragment");
        mDeviceStateFragment = (DeviceStateFragment) mManager.findFragmentByTag("mDeviceStateFragment");
        mUserCenterFragment = (UserCenterFragment) mManager.findFragmentByTag("newsFrg");
    }
    super.onCreate(savedInstanceState);
} 

方法二、禁止系统缓存fragment,这样,当activity重新进入的时候,savedInstanceState中没有缓存,就不会导致fragment冲突的问题了,具体方法如下

 

@Override
public void onSaveInstanceState(Bundle outState) {
    //super.onSaveInstanceState(outState);   // 禁止系统缓存fragment
} 

注:以上两个方法都是复写的activity父类中的方法,两个方法不可同时使用

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值