android activity启动流程(全网最全Android开发笔记)
-
-
类目:知识大全
-
联系人:
-
微信号:
-
Q Q 号:
-
手机号:
-
浏览量:
306
【商户信息】
【货源详情】
一.先理解栈的概念(放置Activity实例的容器)
1.Task(线性表)
任务堆栈Task是放置Activity实例的容器,先入后出,主要有两个基本操作。 对于堆栈和外堆栈,其存储的Activity不支持排序。只能根据压栈和出栈操作更改Activity的顺序
2.app启动时,系统会为它默认创建一个对应的Task,用来放置根Activity
可以在ps: Activity之间相互启动,当前APP应用程序的Activity可以启动其他APP应用程序的Activity (照相机)。 然后,堆栈功能可以将其他app的Activity添加到自己的app的堆栈中。
因此,可以将Task理解为管理所有使用的Activity实例的堆栈,但从. android5.0开始,将在进程之间调用Activity,并将该Activity放入新的堆栈中。
二.启动模式(只能根据压栈和出栈操作更改Activity的顺序,所以是启动模式是以哪种姿势入栈)
在AndroidManifest文件的属性andorid:launchMode或Intent的标志中设置
1.standard (以正常姿态进入堆栈) )。
默认模式。 在此模式下,缺省情况下会创建新实例。 因此,在此模式下,可以有多个相同的实例,也可以重叠多个相同的Activity。 应用场景:大多数活动。
2.singleTop (栈顶复用)==FLAG_ACTIVITY_SINGLE_TOP
堆栈复用模式。 如果要打开的activity已经存在于任务堆栈的顶部,则不会创建新实例,而是调用onNewIntent ()方法。 避免重复创建堆栈顶部的activity。 应用场景:必须在通知栏中单击收到的通知,然后启动Activity。 这个活动可以使用singleTop。 否则,每次单击都会创建一个新的Activity。 在一个场景中连续快速单击,启动了两个Activity。 如果此时启动的Activity使用的是singleTop模式,则还可以避免此错误。
3.singleTask (栈中的多重暂停)==FLAG_ACTIVITY_CLEAR_TOP
栈内复用模式,activity在任务栈中只存在一个实例。 如果任务堆栈中已经存在要激活的activity,则不会创建新的activity。 而是重用此已存在的activity,并调用onNewIntent ()方法清空此activity任务堆栈上的所有activity ) http://www.Sina.com的应用场景在大多数APP应用程序中,单击主界面中的“后退”按钮时将退出APP应用程序。 第一次进入主界面后,主界面位于堆栈底部。 此后,无论打开了多少个Activity,返回主界面后,都不是通过删除主界面Activity上的所有Activity将主界面Activity添加到堆栈上
4.(不进入堆栈)。
单实例模式只能在整个蜂窝电话操作系统中存在一个实例。 不同的APP应用程序打开此activity并共享相同的公用activity。 他自己在独立的任务堆栈中执行,任务堆栈中只有一个他的实例。 应用场景:调用来电接口。 此模式的使用情况很少见,可能在Launcher中可用。 或者,确保Activity只能是一个实例。 建议慎重使用。
5.FLAG_ACTIVITY_NO_HISTORY
Activity将使用此模式启动Activity。 当Activity启动其他Activity时,Activity将消失且不会保留在Activity堆栈中。
FLAG_ACTIVITY_NEW_TASK
此属性的原则是设置此状态,首先检查是否存在与启动的Activity具有相同亲和性的任务堆栈,如果存在,则直接将整个堆栈移动到前台,并保持堆栈中的状态不变。 这意味着堆栈中的Activity顺序不会改变
1 .获取任务(; 获取当前活动所在的堆栈
2 .同一APP应用程序中的activity具有相同的亲和性(即Actviitya intent的情况下为setFalg )。
Intent.FLAG_ACTIVITY_NEW_TASK )前往Activityb,但Actviitya和Activityb仍然是堆栈
只有在不同的APP上跳转才能创建新的Task。
3 .要在activity上下文之外启动activity,必须在Intent中设置FLAG_ACTIVITY_NEW_TASK标志。 否则,将报告异常。
CLEAR_TOP回到栈顶
四 FLAG_ACTIVITY_CLEAR_TASK(必须和FLAG_ACTIVITY_NEW_TASK一起使用)