关于activity在被系统回收会不会在走onDestory的问题,不管是在开发中,还是在面试过程中经常会遇到或者被问。现在我们先从整个项目上来分析。
首先一个应用(项目)正常情况下在linux中只会有一个进程(不是绝对的),应用只有在进程存活的情况下才会按照正常的生命周期进行执行,如果进程突然被kill掉,相当于System.exit(0); 进程被杀死,根本不会走(activity,fragment)生命周期。例如安装的一键清理等功能,同样不会被调用。只有在进程不被kill掉,正常情况下才会执行ondestory()方法。
接下来具体讲解一下,如果activity被回收如何恢复。
当系统内存不足时, activity会被回收,我们其实可以覆写onSaveInstanceState()方法。onSaveInstanceState()方法接受一个Bundle类型的参数, 开发者可以将状态数据存储到这个Bundle对象中, 这样即使activity被系统摧毁, 当用户重新启动这个activity而调用它的onCreate()方法时, 上述的Bundle对象会作为实参传递给onCreate()方法, 开发者可以从Bundle对象中取出保存的数据, 然后利用这些数据将activity恢复到被摧毁之前的状态。例如在
//保存需要的状态数据
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
Stringstr= "dddddddddd";
outState.putString("str", str);
}
//在重新创建的时候从Bun