关于Activity生命周期的一些小总结

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/mattdong0106/article/details/52107073
  • 只要之前的activity仍然被部分可见,这个activity就会一直处于Paused状态。然而,一旦之前的activity被完全阻塞并不可见时,则其会进入Stop状态。
    不同于暂停状态的部分阻塞UI,停止状态是UI不再可见并且用户的焦点转移到另一个activity中.

  • 极端情况下,系统会直接杀死我们的app进程,并不执行activity的onDestroy()回调方法, 因此我们需要使用onStop()来释放资源,从而避免内存泄漏。

  • 当activity从Stopped状态回到前台时,它会调用onRestart().系统再调用onStart()方法,onStart()方法会在每次activity可见时都会被调用。onRestart()方法则是只在activity从stopped状态恢复时才会被调用,因此我们可以使用它来执行一些特殊的恢复(restoration)工作,请注意之前是被stopped而不是destrory。

  • 通常来说,跳转到其他的activity或者是点击Home都会导致当前的activity执行onSaveInstanceState,因为这种情况下的activity都是有可能会被destory并且是需要保存状态以便后续恢复使用的,而从跳转的activity点击back回到前一个activity,那么跳转前的activity是执行退栈的操作,所以这种情况下是不会执行onSaveInstanceState的,因为这个activity不可能存在需要重建的操作

  • 横竖屏切换时,如果不做任何配置,生命周期方法的回调顺序为:

    onPause–onSaveInstanceState–onStop–onDestory–onCreate–onStart–onResume

  • 弹出一个Dialog时,onPause会调用吗?什么情况下会,什么情况下不会?

    首先,如果你弹出的是本Activity的Dialog,并不会有任何生命周期方法调用。你肯定不服并且说:应该是onPause方法调用,明明Activity不可点击了嘛!
    我想说的是,Dialog是一个View,它本身就依附在Acitivty上,可以理解为是属于本Activity的,所以它的焦点也自然是本Activity的焦点,自然不会有什么生命周期方法调用了。
    如果其他Activity的Dialog弹出了,onPause才会调用。

猜你喜欢

转载自blog.csdn.net/mattdong0106/article/details/52107073