Activity生命周期以及启动模式(一)

本文深入剖析了Android中Activity的生命周期,包括标准、异常情况下的生命周期流程,以及四种启动模式:standard、singleTop、singleTask和singleInstance的特点。同时,探讨了onNewIntent方法的作用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Activity详细解读

  1. 典型情况下生命周期分析:
    onCreate(): 表示Activity正在被创建,这是生命周期的第一个方法,在这个方法里可以做一些初始化的操作,比如setContentView去加载界面布局等。
    onRestart():当前Activity由不可见到可见状态会回调,这种情形一般是用户行为,比如,用户按下HOME键然后又切换到这个Activity。
    onStart(): 表示Activity正在被启动,这时候Activity还没有被显示出来,没办法和用户交互。
    onResume(): 表示当前Activity已经出现在前台并开始活动。
    onPause()::当前Activity正在停止,注意不能进行耗时操作。
    onStop():表示Activity即将停止,可以做一些轻量级的回收工作,同样注意不能耗时。
    onDestroy():Activity即将被销毁,这是生命周期的最后一个回调,可以做一些回收工作和最终的资源释放。

    正常情况下Activity的生命周期只有上面7种,下图描述了Activity的切换过程。
    在这里插入图片描述

  2. 异常情况下Activity生命周期分析
    默认情况下,如果Activity不做处理,那么当系统配置发生改变后,Activity就会被销毁并且重建
    Activity->意外情况->onSaveInstanceState->onPause->onStop->onDestory
    当Activity重新创建时:
    onCreate->onRestoreInstanceState
    由于Activity被异常终止,系统会回调onSaveInstanceState来保存当前Activity的状态,这个调用只出现在Activity被异常终止的时候,正常销毁不会调用

    同时,加入onConfigChanges 属性可以避免不必要的重建。

  3. Activity的四种启动模式分析
    standard,singleTop,singleTask,singleInstance

    1.standard:默认模式,每次启动Activity都会重新创建一个实例,不管Activity是否存在
    

    标准模式的Activity默认会进入启动它的Activity的栈中。所以当使用ApplicationContext去启动stander模式的Activity会有问题(ApplicationContext非Activity类型),所以此时要为启动的Activity指定 FLAG_ACTIVITY_NEW_TASK标志位,这时启动的时候就会创建一个任务栈,实际上这种模式可以理解为singleTask。

    2.singleTop:栈顶复用模式,如果新Activity已经位于栈顶,那么此Activity不会别创建
    

    如果新的Activity没有在栈顶,那么依然会被创建。

    3.singleTask:栈内复用模式,只要Activity在栈内存在,多次启动都不会重新创建该Activity。
    

    注意singleTask默认具有clearTop的效果

    4.singleInstance:加强版singleTask,具有此种模式的Activity只能单独的位于一个任务栈 
    

    当要启动的Activity具有此种模式,系统会为其创建一个新的任务栈,此Activity单独运行在这个任务栈中,由于栈内复用的特征,后续的请求均不会创建新的Activity,除非这个任务栈被系统销毁了。
    必须配合 taskAffinity属性使用才会有效果。

onNewIntent
大概意思是当Activity被设以singleTop启动,当需要再次响应此Activity启动需求时,会复用栈顶的已有Activity,还会调用onNewIntent方法。

并且,再接受新发送来的intent(onNewIntent方法)之前,一定会先执行onPause方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值