Activity的生命周期及启动模式

Activity的生命周期

ava

  1. onCreate() :这个方法是在活动最开始被创建的时候调用,在这个方法中完成活动的初始化操作

  2. onStart() :这个方法是在活动由不可见变为可见的时候调用

  3. onResume() :这个方法是在活动能被用户操作的时候调用,例如点击、滑动等

  4. onPause() :这个方法是另外一个活动将要启动的时候调用

  5. onStop() :这个方法是活动不可见时调用

  6. onRestart() :这个方法是活动将要重新出现时调用

  7. onDestroy() :这个方法是活动被销毁的时候调用

  8. 当一个活动A被创建时会依次调用 onCreat()、onStart()、onResume()这3个方法。

  9. 当另外一个活动B启用时活动A会调用onPause(),而活动B调用onCreat()、onStart()、onResume(),如果活动A不可见的话,活动A会调用onStop()方法。

  10. 当在活动B点击返回键时,活动B先调用onPause方法,若活动A是由不可见变为可见则依次执行onRestart()、onStart()、onResume()方法,然后活动B调用onStop()、onDestroy()方法

流程图如下

graph TD
    A["创建活动A"] -->B("活动AonCreate()、onStart()、onResume()")
    B -->C["活动B被创建"]
    C -->D["活动A onpause()"]
    D -->F["活动B onCreate()、onStart()、onResume()"]
    F -->G["活动A是否可见"]
    G -->|"是"| H["用户点击返回"]
    H -->J["活动B onPause()"]
    J -->I["活动A onResume()"]
    I -->K["活动B onStop()、onDestroy"]
    G -->|"否"| L["用户点击返回"]
    L -->M["活动B onPause()"]
    M -->N["活动A onRestart()、onstart()、onResume"]
    N -->K

异常情况下的生命周期分析

异常情况下的生命周期主要由2种

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

当系统配置发生改变时,acivity会被销毁会调用onPause()、onSaveInstanceState()、onStop()、onDestroy()方法,其中onSaveInstanceState()方法会将activity当前的状态保存为一个Bundle对象,这个方法只会在activity异常终止的情况下调用。

当系统重建时会调用onCreate()、onStart()、onRestoreInstanceState()、onResume()方法
onRestoreInstanceState()方法去获取之前所保存的的Bundle对象作为参数发送给onCreate()、onRestoreInstanceState()方法判断是否重建,如果确定重建,则提取出保存的数据并恢复。

2. 资源内存不足导致优先级较低的Activity被销毁

这种情况下数据的保存和恢复与第一种情况一样,如果资源内存不足,系统会根据activity的优先级来选择杀死哪些activity来释放内存

  1. 前台Activity,正在和用户交互的Activity,用户可以在上面进行一系列的操作,例如点击按钮,滑动列表
  2. 可见但非前台的Activity,可以被用户看见,但是用户不能对其进行操作就像隔了一层罩子
  3. 后台Activity,位于后台的Activity,优先级最低,系统首先清理该部分的Activity

Activity的启动模式

启动模式一共四种

standard

standard是活动默认的启动模式,如果不进行显示指定,所有的活动都会自动使用这种启动模式。每创建一个新的Activity都会将其放入栈中,遵循先进后出,后进先出的原则

singleTop

若某活动在singleTop模式下,每次该活动处于栈顶则不会重新创建该活动

singleTask

当某个活动的启动模式为singleTask时,每次启动该活动时,会检查活动栈中是否存在该活动的实例,若存在,则会将该实例上的所有活动出栈,直到该实例处于栈顶。

singleInstance

指定为singleInstance的活动会启用一个新的返回栈来管理这个活动,并且不会由其他的Activity实例进入。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值