Android的进阶学习(一)--Activity异常退出

最近准备好好从基础学学android,所以还是从必不可少的activity学起走吧。

Activity的异常退出

我们知道android正常启动下Activity的生命周期,但是Activity的遇到异常情况就不会按照这正常的生命周期了。

一.当一个activity的config改变的时候,Activity就会被销毁然后重建。

而我们最熟悉的config的改变就是屏幕方向改变,系统语言改变,还有键盘可见改变了。
当然,由于是异常退出,所以正常情况下的onPauseonstoponDestroy也会被调用。但是,异常的退出,谷歌还是想了办法来解决的。在onstop的前面,系统会调用onSaveInstanceState来保存当前Activity的状态,不过系统只会帮我们保存Activity的视图,而其它的数据 则不会保存,需要你自己复写 onSaveInstanceState来保存了。


@Override
protected void onSaveInstanceState(Bundle outState) { 
    super.onSaveInstanceState(outState); 
   //在这里我们可以把我们需要保存的东西给写入Bundle 
   //....... 
}

接着我们保存了数据就会再新建的Activity中读取出来了,读取保存的数据有两个地方,一个就是我们再熟悉不过的onCreate方法里了:

@Override protected void onCreate(Bundle savedInstanceState) {       
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main);
    if(savedInstanceState != null){
        //取出数据 想干嘛就干嘛吧  
    } 
    }

另一种就是一个独立的回调了:

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

当然,既然回调了这个函数,那么Bundle就不会为空了,所以也就不需要我们进行检查了。对了,onRestoreInstanceState 是在onstart 后面调用的。对此,我们可以和前面的onSaveInstanceStateonStop之前调用联系起来记忆。

Android的进阶学习(一)--Activity异常退出_第1张图片
ActivityLife.png

从图中我们可以看到我们进行数据保存和恢复的在Activity生命周期的具体位置,其中我想说的是,或许很多人会问 “数据保存为什么有两个地方”,其实并不然,这里我们只是不能确定onSaveInstanceState的具体位置。(ps:这里感觉我还有个遗留的知识点:就是在Activity中启动新的Activity是在当前ActivityonPause之后才启动的,所以谷歌叫我们不要在onPause中做太多耗时的操作.......貌似扯远了)

当然,我们知道了config的改变后会影响Activity的重新产生,那么如果你不想让它重新产生又该怎样办呢?

AndroidManifest中,我们的Activity标签中有一个configChanges 属性,对我们可以通过对它进行设置而让Activity发生了相应的设置变化而不重新创建。


可以用|来设置多个属性,当我们这样设置后,那如果我们的屏幕方向改变(或者你设置的其它属性改变)Activity就不会重新创建了,而是回调Activity中的onConfigurationChanged函数了:

@Override
public void onConfigurationChanged(Configuration newConfig) {    
super.onConfigurationChanged(newConfig);   
 //回调在这里,我们就可以操作Configuration了   
 //........
}
二.内存不足的情况下的异常退出

内存不足,貌似这是我们都不想遇到的。但是,遇到了内存不足,android还是会像开始那样对Activity进行数据保存和恢复,所以也就不多说了。

最后

我并没有写damo来验证这些结论,但并不代表这些我们不需要。我觉得用damo去验证是使我们理解并记住所不可缺少的。

还有我是参考《Android开发艺术探索》这本书的,对,就是任大大的。

你可能感兴趣的:(Android的进阶学习(一)--Activity异常退出)