Activity一共四种启动模式:standard、singleTop、singleTask、singleInstance
一个任务栈可以有多个实例,每个实例可以属于不同的任务栈。
standard模式:标准模式,系统默认。每次启动Activity都会创建新的实例,谁启动的这个Activity,这个Ativity就运行在启动他的那个Activity所在的栈中。但非Activity类型的Context并无任务栈,如:ApplicationContext,需为要启动的Activity指定FIAG_ACTIVITY_NEW_TASK标记为,但此时为singleTask模式。
singleTop模式:栈顶复用模式,若新Activity已经位于栈顶,则不会重建(不在栈顶会被重建),同时它的onNewIntent方法会被调用,通过此方法的参数取出请求信息,但他的onCreate()、onStart()方法不会被调用;
singleTask模式:栈内复用模式,一种单例模式;只要在栈内存在,不会重新创建;创建Activity A时,查看有无栈,若无,则先创建栈,再创建A的实例放入栈;若有栈,查看有无实例,若有,则调到栈顶(其上的Activity实例全部出栈,clearTop效果),若无,就创建并压入;
singleInstance模式:单实例模式,加强的singleTask模式,只能单独存在于一个任务栈中。
任务栈:与一个参数TaskAffinity(任务相关性)相关。标识了Activity所需任务栈的名字。默认情况下Activity所需任务栈的名字为应用包名。此属性主要和singleTask模式和allowTaskReparenting属性配对使用。当TaskAffinity与singleTask配对使用,TaskAffinity是singleTask模式的Activity的目前任务栈的名字,待启动的的Activity会运行在名字和TaskAffinity相同的任务栈中;当TaskAffinity与allowTaskReparenting结合使用时,情况复杂,如:程序A和程序B,当A启动B的Activity
C后,若C的alloTaskReparenting为true,则当B被启动后,Activity C会从A的任务栈转移到B的任务栈。
启动模式设置方法:1.配置文件中launcherMode属性;2.通过Intent设置标志位。区别:第二种优先级高。范围不同,第一种无法clear_top,第二种无法singleInstance。
Activity的显示启动和隐式启动:
显示启动需指定被启动对象的组件信息,如:包名和类名;
隐式启动需要Intent匹配目标组件的IntentFilter中的过滤信息。 1.action的匹配规则,Intent中的action存在且必须与过滤规则中的一个action相同,区分大小写;2.category匹配规则,category可以没有,系统会默认匹配default,但是一旦有的话,不论多少,都必须与过滤规则中的一样。3data的匹配规则,data由URI和mimeType组成。若过滤规则没有指定URI,但有默认的URI,默认值为:content和file。Intent中必须为content和file。
本文深入讲解了Android中Activity的四种启动模式:standard、singleTop、singleTask和singleInstance,并介绍了它们的区别与应用场景,同时探讨了任务栈的概念及其与启动模式之间的关系。
5989

被折叠的 条评论
为什么被折叠?



