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相同: