(原创)解决APP进程被杀死出现的一些坑

这几天在开发中遇到了这样一个问题
当打开的App数量达到一定数目时
原先的App进程会被系统杀死
然后再次进入这个被杀死的App时
发现了一些异常
经过排查,是viewpager的getitem方法没有被调用
通过网上的一些信息得知
用安卓默认的恢复方式来恢复这些数据
是会存在一些问题的
比如fragment的getActivity返回的值为空
于是我想到
是否可以不执行重新加载的方式呢?
于是就有了这篇博客。

处理方式其实也很简单,
就是在activity的onCreate方法中做一次判断
代码如下 

@Override
protected void onCreate(Bundle savedInstanceState) {

    if (savedInstanceState != null) {       
        savedInstanceState = null;  
    }

    super.onCreate(savedInstanceState);

}

这里需要注意
一定要在super.onCreate函数前执行
这里是直接把系统保存后传过来的Bundle给置空了
如果你的是fragment相关的原因,可以不用这么极端的做法
直接替换成这段代码即可:
savedInstanceState.remove("android:support:fragments");
但是注意
如果你的Activity类是继承Activity而不是FragmentActivity时
里面的参数为android:fragments

说到这个恢复数据的事,再多提一点
我们都知道安卓恢复数据是用这两个方法

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
    }

    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        super.onRestoreInstanceState(savedInstanceState);
    }

以及oncreate的Bundle参数

在API 21后为Activity增加了一个新的属性
只需在Manifest中的activity设置属性
android:persistableMode="persistAcrossReboots"
activity就有了持久化的能力,另外需要配合一个新的bundle才行,那就是PersistableBundle。 
什么意思呢?
就是机器关机后来做数据恢复用的
这两个方法是上面两个方法的重载
代码如下

  @Override
  public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) 
  {
      super.onSaveInstanceState(outState, outPersistentState);
  }

  @Override
  public void onRestoreInstanceState(Bundle savedInstanceState, PersistableBundle 
  persistentState) {
      super.onRestoreInstanceState(savedInstanceState, persistentState);
  }

可以看到多了一个Bundle
这个bundle里的数据关机后重启开启也是会有的
关于这两个方法,大家可以参考这篇博客
Android onSaveInstanceState()和onRestoreInstanceState()调用时机_此去正年少的博客-CSDN博客
另外,也感谢这篇博客让我解决了开发中的问题
解决Android里getActivity()为空的问题_getactivity为空_brycegao321的博客-CSDN博客

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值