1.关于Activity (上) :生命周期

1.正常情况下的生命周期

  • onCreate
  • onStart - 可见、在后台
  • onResume - 可见、在前台、可以交互
  • onPause - 不能执行耗时操作,影响新的activity的显示
  • onStop
  • onDestroy
// 正常生命周期:从进入到退出
2019-12-12 09:46:05.249 9629-9629/com.example.learndemo D/LifeCycle: onCreate
2019-12-12 09:46:05.338 9629-9629/com.example.learndemo D/LifeCycle: onStart
2019-12-12 09:46:05.348 9629-9629/com.example.learndemo D/LifeCycle: onResume
2019-12-12 09:46:13.114 9629-9629/com.example.learndemo D/LifeCycle: onPause
2019-12-12 09:46:13.477 9629-9629/com.example.learndemo D/LifeCycle: onStop
2019-12-12 09:46:13.479 9629-9629/com.example.learndemo D/LifeCycle: onDestroy
// 正常生命周期:进入Activity
2019-12-12 09:46:44.322 9629-9629/com.example.learndemo D/LifeCycle: onCreate
2019-12-12 09:46:44.414 9629-9629/com.example.learndemo D/LifeCycle: onStart
2019-12-12 09:46:44.423 9629-9629/com.example.learndemo D/LifeCycle: onResume

// 灭屏 (模拟Activity暂停的场景)
2019-12-12 09:46:47.326 9629-9629/com.example.learndemo D/LifeCycle: onPause
2019-12-12 09:46:47.390 9629-9629/com.example.learndemo D/LifeCycle: onStop

// 亮屏,先执行onRestart (模拟Activity恢复的场景)
2019-12-12 09:46:52.839 9629-9629/com.example.learndemo D/LifeCycle: onRestart
2019-12-12 09:46:52.884 9629-9629/com.example.learndemo D/LifeCycle: onStart
2019-12-12 09:46:52.888 9629-9629/com.example.learndemo D/LifeCycle: onResume

2.onStart与onResume,二者有什么不同?

  • onStart 从可见的角度描述activity,此时没有在前台,不能交互操作

  • onResume 从是否在前台的角度描述,可以交互

3. 当前Activity为A,打开新的ActivityB,那么B的onResume与A的onPause的顺序是?

  • onPause不要做重量级操作!!!因为onPause执行完,新Activity才会onResume

4.异常情况下的生命周期

  • 横竖屏切换,默认情况下不做特殊处理会导致activity销毁并重建,当然也可以阻止系统重建activity

在onStop之前会调用onSaveInstanceState来保存activity的状态;
重建后会调用onRestoreInstanceState,通过上面保存的Bundle对象来做一些恢复操作,此处的Bundle不会为空。

上面的方式是异常情况才会调用,当然onCreate也可以拿到Bundle,但是要判空,因为正常情况下Bundle是null。

系统会帮忙做一些恢复操作,每个View都有上面两个方法。

  • 如何阻止activity重建?
    配置configChanges属性,则只会调用onConfigurationChanged方法。
发布了37 篇原创文章 · 获赞 0 · 访问量 585

猜你喜欢

转载自blog.csdn.net/qq_37514242/article/details/103232654