Activity的生命周期




任何一个Activity在显示出来到用户按下回退键退出都会经历一下6个方法onCreate(),onStart(),onResume(),onPause(),onStop(),onDestory();

那么此时生命周期就是一条直线的流程图,之所以出现分支在于onResume后的操作,一个Activity在显示的时候默认是位于回退栈的栈顶(此时就是onResume状态)的,

此时如果一个新的对话框或者Activity覆盖了这个Activity,那么看这个Activity是否被完全覆盖,如果被完全覆盖,那么被覆盖的Activity会经历一个onPause(),onStop()的历程,

此时如果覆盖的Activity退出,此Activity要么执行onRestart()要么执行onCreate(),这完全是取决于系统的,人类无法判决;如果此Activity只是被部分覆盖,还能看到一部分,

那么这个Activity只会执行onPause(),覆盖在上面的Activity退,下面的Activity就会执行onResume()再次显示,其他的没什么可说的。


最常见的问题:一个Activity正在运行,此时过来一个电话,那么此时Activity处于什么状态?

答:这跟手机的类型有管,如果手机的来电显示完全覆盖当前的Activity,那么它就执行onPause()->onStop()最后处于onStop状态;如果来电显示没有完全遮盖当前Activity,

那么他就只执行onPause()最终处于onPause状态。


手机横竖屏切换时默认杀死当前Activity创建新的Activity,可以在清单文件中设置configChanges = "orientation|keyboardHidden|screenSize"来使得当前Activity在横竖屏

切换时不被杀死。


PS: 两个Activity的生命周期:A启动B

A onPause() -> B onCreate() ->  B onStart() -> B onResume() -> A onStop();

B显示时按下回退键:B onPause() -> A onRestart() -> A onStart() -> A onResume() -> B onStop() -> B onDestory();

1 为什么A启动B时在A onPause()后不是A的onStop()而是 B的onCreate()?

 因为A onStop()后A就不可见了,此时如果B在启动的过程中出现crash,那么B就不会显示,A也不可见了,就会出现黑屏

2 为什么A启动B时,不是先B onCreate() 而是先 A onPause()?

  因为如果A里面有视频播放或者音乐或者其他程序的话,在B没有onResume()之前还会继续播放,造成不好的用户体验,所以先在onPause()中停止,再去启动B


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值