Application回收重启程序

背景:

  Android系统会自动回收退到后台的应用,我们可以运行一个后台Service,让我们的应用被回收的优先级变低,当时终归还是无法保证我们的进程被系统回收。

当系统被回收之后,我们缓存的一些数据也会被回收,当再次进入Activity的时候很可能会出现NULL指针异常。我们可以将数据持久化到本地,然后恢复Activity的时候从本地获取我们需要的数据。

  有一些我们继承的第三方的sdk,当进程被回收之后,需要重新进行初始化,并不是简单的恢复数据就能解决的,这个时候我们可以考虑在进程被回收之后重新跳转到登陆界面进行重新登陆。


解决方案

当进程被回收再次进入到应用的时候,Activity的onCreate方法传入的savedInstanceState != null,平时进入的时候=null,我们可以根据这个进行判断是否结束该Activity,直到我们不需要结束的Activity。我这种方案,当你的应用通过savedInstanceState保存Activity的数据进行恢复的时候就不适用了。这个时候你可以根据Application中缓存的数据做为null判断 。

1、定义一个成员变量allowAutoFinish = true;

2、在BaseActivity中加入

@Override
protected void onCreate(Bundle savedInstanceState) {
    //应用异常重启该Activity
    if(savedInstanceState != null){
        if(allowAutoFinish){
            finish();
        }
    }

3、在不需要退出的Activity中加入

@Override
protected void onCreate(Bundle savedInstanceState) {
    //当应用异常退出重启Activity时,不结束LoginActivity
    allowAutoFinish = false;
    super.onCreate(savedInstanceState);
}

这样,当应用退出到后台,Application被回收之后,再次进入,就会直接回到登陆界面。
可以用DDMS中的kill process模拟进程被回收。也可以疯狂启动手机的应用,让应用背系统回收。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值