【Android - 组件】之Activity的启动模式
Activity的启动模式目前有四种:standard、singleTop、singleTask 和 singleInstance。
1、standard
standard 是标准模式,也是系统的默认启动模式。每次启动一个Activity都会重新创建一个新的实例,不管这个实例是否已经存在。在这种模式下,谁启动了这个Activity,那么这个Activity就运行在启动它的那个Activity所在的任务栈中。例如,Activity A启动了Activity B(B的启动模式是standard),那么Activity B就会进入到Activity A所在的任务栈中。
2、singleTop
singleTop 是栈顶复用模式。在这种模式下,如果新的Activity已经位于任务栈的栈顶,那么此Activity不会被重新创建,同时它的 onNewIntent() 方法会被回调,通过此方法的参数我们可以取出当前请求的信息;如果请求启动的Activity存在与任务栈中但不是位于栈顶,那么这个Activity仍然会被重新创建。
3、singleTask
singleTask 是栈内复用模式。当一个具有singleTask模式的Activity请求启动时(例如Activity A),系统首先会寻找是否存在 A 想要的任务栈,如果不存在这个任务栈,那么系统就会创建一个新的任务栈,然后创建一个新的Activity并放入这个任务栈中;如果存在 A 所需的任务栈,这时要看 A 是否存在于这个任务栈中,如果有实例存在,那么就将 A 调到栈顶,并回调 A 的 onNewIntent() 方法;如果 A 不存在于任务栈中,则创建一个新的Activity并放在这个任务栈的栈顶。
上面所说的 “将A调到栈顶”,具体的做法是:如果A本来就在栈顶,则不采取任何操作;如果A不在栈顶,则将A上面的所有Activity全部清理掉(这种做法也叫 clearTop 效果)。
4、singleInstance
singleInstance 是单实例模式。具有这种模式的Activity只能单独的存在于一个任务栈中,由于任务栈具有复用性,因此后续对这个Activity的请求都不会再创建新的Activity(除非这个独特的任务栈被系统销毁了),只会将运行与后台的这个 singleInstance 任务栈切换到前台运行。
设置启动模式的两种方式
设置启动模式有两种方式:
(1)在 Menifest 文件中设置,示例代码如下:
<activity
android:name="my.itgungnir.launchmode.MainActivity"
android:label="@string/app_name"
android:launchMode="singleInstance"
/>
这里的 launchMode 属性中可以填入的值有四种:standard、singleTop、singleTask 和 singleInstance。
(2)在 JAVA 代码中设置,示例代码如下:
Intent intent = new Intent();
intent.setClass(MainActivity.this, SecondActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
这里的 addFlags 方法中可以填入的值有三种:
- Intent.FLAG_ACTIVITY_NEW_TASK:相当于在Menifest文件中指定Activity的launchMode为 singleTask;
- Intent.FLAG_ACTIVITY_SINGLE_TOP:相当于在Menifest文件中指定Activity的launchMode为 singleTop;
- Intent.FLAG_ACTIVITY_CLEAR_TOP:如果结合singleTask使用,则效果和使用singleTask相同,即创建新的Activity时,如果此Activity存在于任务栈中,则清理调栈中这个Activity之上的所有Activity;如果是结合standard使用,则除了要清理掉这个Activity上面的所有Activity之外,这个Activity本身也需要先销毁,然后重新创建一个新的Activity放于栈顶。
上面的两种方法,第二种方法的优先级大于第一种方法,因此当这两种方法同时存在时,以第二种方法的设置为准。
TaskAffinity
Activity 的 taskAffinity(可以翻译为任务相关性)属性标志了这个 Activity 所需的任务栈的名字,在默认情况下,所有 Activity 的 taskAffinity 属性的值都是 Activity 所在应用的包名。我们可以通过设置Activity的taskAffinity属性来设置这个Activity将要运行在哪个任务栈中。
当启动一个设置了 taskAffinity 属性的 Activity 的时候,这个 Activity 就会被运行到以 taskAffinity 属性为名称的任务栈中。
在使用 taskAffinity 属性时需要注意以下两点:
- (1)taskAffinity 属性的值不能和应用包名相同,否则相当于没有指定;
- (2)taskAffinity属性的值为字符串,且中间必须含有包名分隔符(“.”)。
【Android - 组件】之Activity的启动模式的更多相关文章
- Android开发9——Activity的启动模式
在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作.在Android中Activity的启动模式决定了Activity的启动运行方式. 一. ...
- Activity的启动模式全解standard,singleTop,singleTask,singleInstance
在android中控制Activity的启动模式的属性主要控制两大功能: 1,控制activity 进入哪一个任务task 中, 有两种可能,进入启动task中,进入指定taskAffinity的 ...
- Android开发艺术2之Activity的启动模式
Activity是Android的四大组件之一,他的重要性毋庸置疑,对于这么重要的一个组件,我们首先要知道这些都是由系统进行管理和回调的,要理解Activity的启动模式,我们首先来了解一下Andro ...
- 无废话Android之activity的生命周期、activity的启动模式、activity横竖屏切换的生命周期、开启新的activity获取他的返回值、利用广播实现ip拨号、短信接收广播、短信监听器(6)
1.activity的生命周期 这七个方法定义了Activity的完整生命周期.实现这些方法可以帮助我们监视其中的三个嵌套生命周期循环: (1)Activity的完整生命周期 自第一次调用onCrea ...
- android Activity的启动模式
Android中Activity启动模式详解 在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作.在Android中Activity的启 ...
- Activity的启动模式(android:launchMode)
在android里,有4种activity的启动模式,分别为: “standard” (默认) “singleTop” “singleTask” “singleInstance” 它们主要有如下不同: ...
- Android中Activity的启动模式(LaunchMode)和使用场景
一.为什么需要启动模式在Android开发中,我们都知道,在默认的情况下,如果我们启动的是同一个Activity的话,系统会创建多个实例并把它们一一放入任务栈中.当我们点击返回(back)键,这些Ac ...
- Android笔记(五) Activity的启动模式
Android中Activity是由返回栈来管理的,在默认情况下,每当启动一个新的Activity,它都会在返回栈中入栈,并且出于栈的顶端.但是有些时候Activity已经在栈的顶端了,也就不需要再启 ...
- Android中Activity的启动模式和使用场景
一.为什么需要启动模式 在Android开发中,我们都知道,在默认的情况下,如果我们启动的是同一个Activity的话,系统会创建多个实例并把它们一一放入任务栈中.当我们点击返回(back)键,这些A ...
随机推荐
- javase实现记事本
java编程就是分布式.微服务?离开Spring...我还能写点什么 不知从何时起,自己喜欢上也习惯了用java写点界面程序.app.也许这就是程序员仅剩的一点乐趣.但对我而言.我却很享受这个过程.程 ...
- CTR@因子分解机(FM)
1. FM算法 FM(Factor Machine,因子分解机)算法是一种基于矩阵分解的机器学习算法,为了解决大规模稀疏数据中的特征组合问题.FM算法是推荐领域被验证效果较好的推荐算法之一,在电商.广 ...
- Centos6.5 忘记密码解决方法
问题 原因 : 太久没用centos了 忘记密码了 很尴尬 快照也没说明密码.... 1.重启 centos 在开机启动的时候快速按键盘上的“E”键 或者“ESC”键(如果做不到精准快速可以在启动 ...
- [考试反思]1031csp-s模拟测试96:常态
按照smily的说法这一场的大众分暴力分是不是265啊QwQ那我可真是个大垃圾 总算还是回归了常态. T3文件名写错,把“city.in”写成“city,in” 还好,只丢了20分. T2乱打$O(n ...
- 理解np.nonzero()函数
举三个例子,就能清楚的看到 np.nonzero() 这个函数返回值的意义 一. #例1 一维数组 import numpy as np a = [0,1,2,0,3,0] b = np.nonzer ...
- 曹工杂谈:为什么很少需要改Spring源码,因为扩展点太多了,说说Spring的后置处理器
前言 最近发了好几篇,都是覆盖框架源码,但是spring的代码,我是从没覆盖过,毕竟,如果方便扩展,没谁想去改源码,而spring就是不需要改源码的那个,真的是"对扩展开放,对修改关闭&qu ...
- Nginx 的进程结构,你明白吗?
Nginx 进程结构 这篇文章我们来看下 Nginx 的进程结构,Nginx 其实有两种进程结构: 单进程结构 多进程结构 单进程结构实际上不适用于生产环境,只适合我们做开发调试使用.因为在生产环境中 ...
- getchar()用法 【转】
1.从缓冲区读走一个字符,相当于清除缓冲区 2.前面的scanf()在读取输入时会在缓冲区中留下一个字符'\n'(输入完s[i]的值后按回车键所致),所以如果不在此加一个getchar()把这个回车符 ...
- php sublime常用插件
php sublime常用插件 1 Sublime Text的默认设置是不开启显示编码的,如果想开启,可通过菜单Perference → Settings – User,在打开的配置文件里 ,在大括号 ...
- 使用 Scrapy 爬取去哪儿网景区信息
Scrapy 是一个使用 Python 语言开发,为了爬取网站数据,提取结构性数据而编写的应用框架,它用途广泛,比如:数据挖掘.监测和自动化测试.安装使用终端命令 pip install Scrapy ...