Activity生命周期

一.正常情况下生命周期:

1. 生命周期有哪些函数:

在这里插入图片描述
onCreate(): Activity正在创建,做一些初始化工作。
OnRestart(): Activity正在重新启动,从不可见到可见调用这个方法。
OnStart(): Activity正在启动,可见但不位于前台。
OnResume(): Activity可见且位于前台,可与用户交互。
OnPause(): Activity正在停止,可见但不位于前台,与OnResume()是一对。
OnStop(): Activity即将停止,不可见,可与做些重量级回收操作,与OnStart()是一对。
OnDestroy(): Activity即将被销毁,做一些回收和最终资源的释放,与onCreate()是一对。

2. 不同场景下的生命周期:

(1)第一次启动:onCreate() -> onStart() -> onResume()
(2)Activity(A)打开新的Activity(B):A.onPause() ->B onCreate() -> B onStart() -> B onResume() -> A onStop()
(3)用户从Activity(B)按back键回到Activity(A):B.onPause() ->A.onCreate() -> A.onStart() -> A.onResume() -> B.onStop()
(4)锁屏:锁屏时只会调用onPause(),而不会调用onStop方法,开屏调用onResume()
(5) 弹出 Dialog: 直接是通过 WindowManager.addView 显示的(没有经过 AMS),所以不会对生命周期有任何影响。
(6)启动theme为DialogActivity,跳转透明Activity:A.onPause -> B.onCrete -> B.onStart -> B.onResume

二.异常情况下生命周期:

1.资源相关的系统配置发生改变导致Activity被杀死并重新创建

默认情况下,如果activity不做处理,系统配置发生改变,activity会被销毁并重新创建。系统调用OnSaveInstanceState保存当前activity的状态,当activity被重新创建时,系统调用OnRestroreInstanceState拿到保存的数据。

在OnSaveInstanceState和OnRestroreInstanceState方法中,系统默认帮我们恢复了一部分数据(视图结构),是根据view的id存储和恢复的。

例如横竖屏切换时:
竖屏:启动:onCreat->onStart->onResume.
切换横屏时:
onPause-> onSaveInstanceState ->onStop->onDestory
onCreate->onStart->onSaveInstanceState->onResume
但是配置:androidconfigChanges=“orientation|keyboardHidden|screenSize”,就不会在调用Activity的生命周期,只会调用onConfigurationChanged方法。

2.资源内存不足导致低优先级的Activity被杀死

优先级:前台Activity > 可见但非前台的Activity > 后台Activity

三.Acticity的启动模式

1.Standard:标准模式。每次启动Activity都会创建一个新的Activity实例
2.SingleTop:栈顶复用模式。如果要启动的Activity已经在栈顶,则不会重新创建Activity,只会调用该该Activity的onNewIntent()方法,如果要启动的Activity不在栈顶,则会重新创建该Activity的实例。
3.SingleTask:栈内复用模式。只要Activity在一个栈内存在,则不会创建实例,将这个Activity实例上面的Activity全部出栈,然后回调onNewIntent()方法;如果Activity不存在于栈内,则创建该实例。
4.SingleInstance:要创建在一个新栈,然后创建该Activity实例并压入新栈中,新栈中只会存在这一个Activity实例.

附一个命令用来查看栈内的activity:

adb shell dumpsys activity

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值