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

来源:互联网 发布:单片机开发板wifi蓝牙 编辑:程序博客网 时间:2024/05/21 17:20

Activity的三种状态以及对应的方法

  • 显示状态
    • onCreate
    • onStart 活动由不可见->可见
    • onResume 活动准备好与用户交互时候
  • 不可见状态
    • onPause 启动或者恢复另一个活动时候调用,通常在该方法释放和保存一些数据。但这个方法的执行速度要快,否则影响到新的栈顶活动的使用
    • onStop 活动【完全】不可见时候调用,比如调用对话框这个方法不会执行
  • 销毁状态
    • onDestroy

活动A启动一个新的活动B所执行的生命周期方法流程

  • A:onPause->B:onCreate->B:onStart->B:onResume->A:onStop
  • 为什么先执行onPause方法?
    • 比如A活动正在播放音频,突然有电话接入,要立刻启动电话接入活动,所以要先把A活动的音频暂停(onPause),才能启动新的活动。
    • 所以一般在onPause方法中可以将音频,视频暂停
  • 为什么执行完B的3个方法再执行A的onStop方法?
    • 因为执行A的onStop方法说明A活动已经不可见了,假如先执行A的onStop方法再创建B活动,万一活动B出现闪退现象,则会出现黑屏现象,用户体验不好。
    • 所以这是因为防止新的活动会出现闪退现象而造成黑屏的现象方法。

Activity横竖屏切换问题

  • 横竖屏切换的生命周期为:onPause->onStop->onDestroy->onCreate->onStart->onResume
  • 为了保持当前Activity的状态,可以调用onSaveInstanceState方法,在该方法中保存一些状态信息,然后调用onCreate方法时候可以将保存的数据读取出来。生命周期为:
    • onPause->onSaveInstanceState->onStop->onDestroy->onCreate->onStart->onResume

启动Activity的方式

  • 显式启动
    • 当Activity的类名已知,可以通过显式启动
  • 匿名启动
    • 调用系统的Activity,比如浏览器,短信等等
    • 比如调用其他的Activity,无法知道类名情况
      • 通过Manifest文件,设置activity标签里面中的action和category属性,如下图,其中“xxx”自己设定
      • 这里写图片描述
      • 然后在调用的Activity代码中,写入以下代码即可,xxxx要与上图的xxxx相同:
        这里写图片描述
原创粉丝点击