Activty的基本知识,只看这一个就足够了。


Activty的基本知识,只看这一个就足够了。


前言


一、Activity的四种启动模式

activity会根据自身不同的启动模式,自身的生命周期的方法会进行不同的调用。

一、先进行一个基本知识的科普

1.一个应用程序通常会有多个Activity,这些Activity都有一个对用的action,可以通过action来启动对应的Activity(隐式启动)。

<action android:name="android.intent.action.MAIN"/>

2.任务栈(Task Stack)或者叫退回栈(Back Stack)介绍:

2.1任务栈用来存放用户开启的activity。

2.2在应用程序创建之初,系统会默认分配给其一个任务栈(默认一个),并存储根Activity。

2.3同一个Task Stack,只要不在栈顶,就是onStop状态:
在这里插入图片描述

2.4任务栈的id自增长型,是integer类型。

2.5新创建的Activity会被压入栈顶。点击back会将栈顶activity弹出,并产生新的栈顶元素作为显式界面(onResume状态)

二、启动模式

1.默认启动模式standard:
不在manifest文件中设定的时候,Activity的默认启动模式就是standard。在该模式下,启动的Activity会依照启动顺序被依次压入Task栈中:

在这里插入图片描述
2.栈顶复用模式singleTop:
在该模式下,如果栈顶Activity为我们要新建的Activity(目标Activity),那么就不会重复创建新的Activity。
在这里插入图片描述
3.栈内复用模式singleTask:
与singleTop模式类似,只不过singleTop模式是只针对栈顶的元素,而singleTask模式下,如果Task栈内存在目标activity实例,则:
1.将task栈内对应activity之上的所有activity弹出栈。
2.将对应activity置于栈顶,获得焦点。
在这里插入图片描述
4.全局唯一模式:singleInstance
在该模式下,会为目标activity分配一个新的affinity,并创建一个新的Task栈,将目标Activity放入新的Task,并让目标Activity获得焦点。新的Task有且只有这一个Activity实例。 如果已经创建过目标Activity实例,则不会创建新的Task,而是将以前创建过的Activity唤醒(对应Task设为Foreground状态)
在这里插入图片描述

三、android关于在task中启动activity的默认规则

呼,也许这个二级标题的名称起的有些匪夷所思,但各位看官,先听笔者讲一个例子如何:
想象一下这个使用场景:
我们在“短信”app中,点击短信发送者的电话号码,会不会弹出一个“添加联系人”的选项?
点击“添加联系人”,屏幕会从“短信”跳转至“添加联系人”。
“添加联系人”这个activity,实际上是由“联系人”app所提供的。
那么请大家思考一个小问题:
此时的“添加联系人”activity,究竟是和哪个app相关的?
答案1:与“短信”相关的?
相关,因为这个页面实际上是从短信跳转过来的,他们是在一整个操作逻辑的链条上的。
答案2:与“通讯录”相关的?
不相关所谓不相关:若此时用户点击“最近任务”的方块键,不应该看到“通讯录”app的Task栈。若此时回到桌面,点击“通讯录”app图标,看到的也应该是通讯录的联系人列表。
所以,对于“添加联系人”页面来说,它是与打开的app有相关性,而不是提供者app。
更为确切的说,是与打开它的Task栈,有相关性。

这就是android默认规则:在不同的Task中,打开同一个activity,Activity会被创建多个实例,分别放进每一个Task。

二、Activity的生命周期

在这里插入图片描述
在这里插入图片描述

一、各个方法的调用时机

Activity类中定义了7个回调方法,覆盖了活动生命周期的每一个环节。

1.onCreate():在每个activity中,我们都重写了这个方法,它会在活动第一次被创建的时候调用。可以在这个方法中完成activity的初始化操作,比如加载布局(setContentView)和绑定事件(例如绑定EventBus EventBus.getDefault().register(this);)。

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

3.onResume():这个方法在activity准备好和用户进行交互的时候调用。此时activity一定位于返回栈的栈顶,并且处于运行状态。

4.onPause():这个方法在系统准备去启动或者恢复另一个activity的时候调用。通常会在这个方法中将一些消耗CPU的资源释放掉,以及保存一些关键数据,但这个方法的执行速度一定要快,不然将会影响到新的栈顶活动的调用。

5.onStop():这个方法在活动***完全不可见***的情况下调用。此方法与onPause方法的主要区别在于,如果启动的新activity是一个对话框式的activity,那么onPause()方法会得到执行,而onStop()方法并不会执行。

6.onDestroy():这个方法在activity被销毁之前调用,之后activity的状态将变为销毁状态。

7.onRestart():这个方法在活动由停止状态变为运行状态之前调用,也就是activity被重新启动了。

二、在各种场景下,各个方法的调用情况

1.启动Activity:系统会先调用onCreat方法,然后调用onStart方法,最后调用onResume,此时Activity进入运行状态。

2.当前Activity被其他activity覆盖其上或者锁屏:系统会调用onPause()方法,暂停当前Activity的执行。

3.当前Activity由被覆盖状态回到前台或者解锁屏:系统会调用onResume方法,再次进入运行状态。

4.当前Activity转到新的Activity界面或按Home键回到主屏,自身退居后台:系统会先调用onPause方法,然后调用onstop方法,进入停滞状态。

5.用户后退回到此Activity:系统会先调用onRestart方法,然后调用onStart方法,最后调用onResume方法,再次进入运行状态

6.当前Activity处于被覆盖状态或者后台不可见状态,且当前系统内存不足,则此Activity会被杀死,而当用户再次回退至当前Activity:此时再次调用onCreat、onStart、onResume进入运行状态。

7.用户退出当前Activity:系统先调用onPause方法、然后调用onstop()方法,最后调用onDestroy方法,结束当前Activity。

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。**

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值