Activity生命周期详解

来源:互联网 发布:南宁java培训多少钱 编辑:程序博客网 时间:2024/05/29 11:42

Actvitiy的生命周期是Android知识点的重中之重,必须要掌握的。


什么是生命周期?生命周期在我看来就是一个事物从创建到死亡的一系列过程,比如人有生命周期,电子产品也有生命周期,一个线程也有生命周期。同样Activity也有生命周期。


Activity的生命周期如下图所示:




我们可以看到它有几个生命周期函数,分别如下含义:


onCreate:当一个Activity被创建的时候会调用其onCreate方法。一般情况下我们都会在这个方法中设置界面并初始化一些参数。


onStart:当一个Activity有界面但不能被我们操作的时候会调用这个方法。我们可以理解为该Activity目前在后台。


onResume:当一个Activity有界面并且可以被我们触摸和操作的时候就会调用这个方法,这时该Actvity处于前台。


onPause:当一个Activity能被我们看到,但不可以被我们操作的时候会调用该方法,这时Activity处于后台。这里值得可以被我们看到指得是Activity被部分遮挡,比如弹出了一个dialog或者新的Activity是透明背景。


onStop:当一个Activity不能被我们看到和操作的时候调用该方法,这时Activity彻底在后台。比如按下了home键或者启动一个新的Activity并导致该Activity不可见。


onRestart:当一个Activity从不可见转为可见时调用,比如从后台返回到该Activity。


onDestory:当一个Activity被销毁时调用。


onCreate和onDestory只会被分别调用一次,并且成对存在。当系统内存不足的时候,会杀死优先级低的Activity,这里优先级指的是后台堆栈,并且不可见不可被操作的Activity。


此外如果从onPause返回,则直接调用onRemuse。


保存和恢复数据:


以上生命周期其实还有个需要注意的地方,就是当被系统杀死的时候,整个生命周期会从头来一次,这时候所有的数据都会被重置,这时我们为了避免一些数据丢失,比如一些游戏的数据,我们需要事先对数据做保存,保存的方法在onSaveInstanceState,恢复则在onRestoreInstanceState。这两个方法分别会返回一个bundle对象,我们需要在save方法中存储数据,在restore中取出数据,同时我们还可以在onCreate的时候取出数据,但需要注意的是onCreate的bundle有可能是空的,所以在onCreate中取出数据需要进行null判断。而onRestore里面是肯定不为空的,正常情况下生命周期是不会回调onRestore的,只有当有数据需要恢复的时候才会调用。


他们的生命周期调用时机如下:


当Activity出现异常需要保存数据时,onSaveInstanceState会在onStop之前被调用,该回调有可能在onPause之前也有可能在onPause之后,然后Activity被销毁,并开始重建,在onCreate中回调回bundle,然后调用onStart,再调用onRestoreInstanceState,该恢复会在onStart之后被调用。


onNewIntent:


我们都知道当一个Activity是SingleTask或者SingleTop或者SingleInstance时有可能会调用onNewIntent方法,那么onNewIntent方法是何时被调用呢?


当一个Activity是SingleTop,并且在栈顶时,我们启动他,它会先调用onPause方法,随后被调用onNewIntent方法,再onRemuse方法。


如果A是singleTask,并且在堆栈中时,我们启动他,当前Activtiy会调用onPause方法,然后调用A的onNewIntent,onRestart,onStart,onResume,最后再调用前Activity的onStop、onDestory方法。


我们只要记住onNewIntent会优于所有原本该执行的生命周期函数执行即可。

0 0