最近后台提过来几个崩溃日志叫我处理一下,仔细一看原来是app切换到后台重新进入导致一些对象空指针异常的情况。在网上查了点相关资料,发现还是自己写来的好,根据大量的实践,找到了一个比较稳妥的方法,也非常简洁
1、因为app切换到后台之后如无意外一般都会被杀死,只是时间的长短而已(做进程守护的不算) ,当app被杀死时 一个activity里面的参数都会被回收,但是任务栈还存在,所以我们app从后台进入前台就会导致空指针异常等一些奇怪的崩溃问题.
2、首先当app被后台杀死后Application里面的生命周期也会走一遍,activity的生命周期同样会走一遍,我们就从这两个地方入手,下面上代码
3、在Application中定义一个变量flag = -1,在你的引导页(就是你app刚刚进来的那个页面!我的引导页名字叫GuideActivity)因为会重新走一遍Application 所以我们只需要在BaseActivity中判断flag是否为-1就行了
public static int flag = -1;
.......
public class GuideActivity extends BaseActivity {
.......
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
MyApplication.flag = 0;
super.onCreate(savedInstanceState);
}
}
......
if (Application.flag == -1) {
L.i("app被意外杀死重启App");
Intent i = getBaseContext().getPackageManager()
.getLaunchIntentForPackage( getBaseContext().getPackageName() );
i.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK|Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(i);
return;
}
这就是完整代码,主要是因为代码太少了,我就不上Demo了