Activity的四种启动模式与生命周期

本文详细介绍了Android中Activity的四种启动模式:Standard、SingleTop、SingleTask和SingleInstance,以及它们各自的行为特点。同时,文章还阐述了Activity的生命周期,包括onCreate(), onStart(), onResume(), onPause(), onStop()和onDestroy()等关键方法。此外,还讨论了系统退出Activity时的状态保存,onBackPressed()的监听以及Activity间的数据传递方法,如Intent传递基本数据、Bundle和对象。" 112034005,10546154,Spark SQL与Hive3交互问题及解决方案,"['Spark-SQL读取hive底层', 'Hive3.0', 'Hive事务表', 'ACID功能', 'Hive catalogs']
摘要由CSDN通过智能技术生成

一般情况下,Android中每个应用程序一开启就会创建一个任务栈,任务栈的ID是自增长的。最小化的时候,应用程序实际上是后台运行,任务栈是保留的。

  • Standard 标准启动模式:这种模式下每开启一个新的Activity,都会被放置在任务栈的栈顶,不存在复用
  • SingleTop 启动模式:这种模式下,如果栈顶已经存在了要开启的Activity,系统就不会重复创建了,而是利用这个已经存在的Activity,只复用栈顶的Activity
  • SingleTask 启动模式:这种模式下,它要求当前Activity只会在任务栈存在一个实例,如果要开启的 Activity已经在任务栈中,系统会直接复用这个已经存在的Activity,并清空这个 Activity上面所有的栈引用,复用所有已存在的Activity
  • SingleInstance 启动模式:这种模式下,系统会创建一个单独的任务栈,这个任务栈里只有它自己,并且在整个手机操作系统内存里,它是唯一的。比如打电话时的通话界面,全局唯一

然后是Activity的生命周期,被迫退出时的信息状态保存,返回键监听,Activity之间的数据传递等。

Activity的四种启动模式

Activity的四种启动模式:

1、Standard 标准启动模式

这种模式下每开启一个新的Activity,都会被放置在任务栈的栈顶,不存在复用。

2、SingleTop 启动模式

这种模式下,如果栈顶已经存在了要开启的Activity,系统就不会重复创建了,而是利用这个已经存在的Activity,只复用栈顶的Activity。

3、SingleTask 启动模式

这种模式下,它要求当前Activity只会在任务栈存在一个实例,如果要开启的 Activity已经在任务栈中,系统会直接复用这个已经存在的Activity,并清空这个 Activity上面所有的栈引用,复用所有已存在的Activity。

4、SingleInstance 启动模式

这种模式下,系统会创建一个单独的任务栈,这个任务栈里只有它自己,并且在整个手机操作系统内存里,它是唯一的。比如打电话时的通话界面,全局唯一。

Activity生命周期

Activity是Android组件中最基本也是最为常见用的四大组件之一,也是我们在开发过程之中接触最多的组件,所以了解Activity的生命周期,并正确的理解与应用,是必不可少的,下面就来介绍Activity生命周期。

Tips: AndroidStudio中通过logt可以快速生成TAG,logd、logv、logi、loge分别是打印不同级别日志的快捷键。

onCreate() :当Activity第一次创建时调用。该方法(如果有)会提供给你一个包含之前活动的冻结状态信息bundle包。

onStart():当Activity被展示在用户眼前时调用。如果活动出现在前台紧接着是onResume(),如果活动直接隐藏则紧接着是onStop()。

onResume():当Activity将开始与用户进行交互时调用。在这个时间点你的活动将会在活动堆栈的顶端,用户输入将会访问它。

onPause():当系统将要恢复一个之前的活动。这是一个有代表性的常常用于提交未被存储的改动信息为持久数据,停止动画和消耗CPU的东西等。实现该方法必须要特别的迅速,因为在此方法返回之前,下一个活动将不会恢复。如果活动将返回到前台则接下来调用onResume(),如果要隐藏到用户看不见的地方时,则调用onStop()。

onStop():当另一个活动被恢复且完全覆盖该活动,而该Activity将不在展示给用户时调用。这种情况将发生在一个新的活动将被开始,一个退出的活动将被恢复,又或者该活动将要被销毁。如果该活动将恢复与用户交互则调用onRestart(),如果该活动将被销毁则调用onDestory()。

onDestory():Activity被销毁钱最后一个被调用的方法。这个方法将会发生因为活动将会结束(在活动中调用finish()方法,或者系统临时销毁该实例节约空间。你可以使用isFinishing()方法区别这两种场景)。

从打开应用进入MainActivity再到返回键退出应用:

现在打开SecondActivity,那么MainActivity和SecondActivity的生命周期又是怎样的呢?

首先可以看到MainActivity进入暂停状态,然后SecondActivity进入初始化阶段(onCreate、onStart、onResume),SecondActivity完全展示在用户面前并且等待用户操作的时候,MainActivity才进入onStop()方法,所以即是Activity不再显示的时候才进行onStop。当返回MainActivity的时候,会执行onRestart() -> onStart() -> onResume()即途中最右边那一条路径,而SecondActivity先进入onPause,也是等MainActivity的onResme执行完成后才逐步销毁。

那么如果换成是DialogActivity呢?

可以看到,由于MainActivity并未完全被DialogActivity遮挡,所以并未进入onStop(),而是只进入了暂停状态(onPause),当退出DialogActivity后MainActivity直接执行onResume方法。所以当Activity未被完全遮挡会进入暂停状态,暂停恢复的时候&#x

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Android系统中,Activity四种启动模式,分别是: 1. Standard模式:默认的启动模式,每次启动Activity都会创建一个新的实例。如果在应用程序中多次启动同一个Activity,就会创建多个Activity实例。它的特点是可以在任何地方启动Activity,不会影响其他Activity生命周期。 2. SingleTop模式:如果要启动Activity在栈顶已经存在,那么不会创建新的实例,而是复用栈顶的Activity,并调用onNewIntent()方法传递参数。如果要启动Activity不在栈顶,那么就会创建新的实例。它的特点是可以避免创建多个实例,但是如果Activity已经存在且不在栈顶,还是会创建新的实例。 3. SingleTask模式:如果要启动Activity在栈中已经存在,那么系统就不会创建新的实例,而是将栈中该Activity上面的所有Activity全部出栈,使该Activity成为栈顶。如果要启动Activity不在栈中,那么就会创建新的实例。它的特点是可以保证一个Activity只有一个实例,并且在栈中只有一个实例。 4. SingleInstance模式:一个独立的栈会为该Activity创建,且该栈中只有该Activity的实例。如果要启动Activity已经存在于独立栈中,那么就会复用该Activity的实例。如果要启动Activity不在独立栈中,那么就会创建新的实例并放入该独立栈中。它的特点是可以保证在整个系统中只有一个实例,并且该实例会独立于其他Activity

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值