一、启动模式介绍
启动模式简单地说就是Activity启动时的策略,在 Android Manifest.xml中的标签的android:launchMode属性设置;
启动模式有4种,分别为standard、singleTop、singleTask、singleInstance。
Activity的任务栈,任务栈是一种“先进后出”的栈结构,这个比较好理解,就是我们每按一次back键就会有一个Activity出栈,知
道这个任务栈空为止,当任务栈为空时候系统就回收这个任务栈。
二、四大启动模式的理解
1.standard:标准模式,这也是系统默认的启动模式。每启动一个Activity都会被重新创建一个新的实例,不管这个实例是否已经存在。谁启动这个Activity,那么这个Activity就运行在启动他那个Activity点任务栈中,但当我们用Application去启动一个standard模式的Activity的就会报错,因为非Activity类型的Content没有所谓的任务栈,这时候我们要为就要启动的Activity指定一个标志位FLAG_ACTIVITY_NEW_TASK,这样启动的时候就为这个Activity再创建一个任务栈,这其实就是SingleTask的启动方式。
2.singleTop:栈顶复用模式。在这种模式下,如果新的Activity已经位于任务栈的栈顶,这时候再启动该Activity,该Activity就不会被创建,即该Activity的Oncreate、onStart方法不会被调用,同时他的OnNewIntent方法会被调用,通过此方法的参数可以取出当前请求的信息。如果这个Activity不在栈顶,这个Activty的实例将会被创建。
3.singleTask:栈内复用模式。是一种单实例模式,在这种情况下只要一个Activity在一个栈内存在,那么多次启动Activity都不会重新创建实例,和SingleTop一样的,他也会执行OnNewIntent的方法,就是说当一个singleTask的Activity启动了以后,系统会寻找是否有该Activity想要的任务栈,如果有的话,看Activity是否在任务栈内实例化过,如果没有就重新创建一个Activity的任务栈。
4.singleInstance:单实例模式。就是说是一种加强的singleTask,他除了有所有的singleTask的任务外,还有就是此种启动模式的Activity只能单独的位于一个任务栈内。
任务栈由前台任务栈和后台任务栈,当后台任务栈中有Activity需要被启动时候,整个后台任务栈将会当前台的任务栈中。singleTask所需的任务栈,默认情况下Activity所需的任务栈都是该应用的包名,当然我们也可以给每个Activity单独通过TaskAffinity的属性指定任务栈,通过TaskAffinity指定的任务栈不能是该应用的包名。通过给Intent设置标志位和在注册文件内都可以指定Activity的启动模式,这两种的标志位的优先级高。
三、Activity的Falgs标志位
Activity有很多Flags,我们主要说常用的,
FLAG_ACTIVITY_NEW_TASK,这个标志位的作用是为Activity指定“singleTask”启动模式,和在XMl指定效果一样;
FLAG_ACTIVIYT_SINGLE_TOP,这个标志位的作用是为Activity指定“singleTop”启动模式;
FLAG_ACTIVITY_CLEAR_TOP,这个和FLAG_ACTIVITY_NEW_TASK连用,是指同一任务栈内位于该Activity上面的所有Activity都要出栈;
FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS,具有此标志的Activity将不会出现在用户通过历史列表此Activity。
Activity的启动模式和onNewIntent
原创
©著作权归作者所有:来自51CTO博客作者gundumw100的原创作品,请联系作者获取转载授权,否则将追究法律责任
下一篇:利用广播实现强制下线功能
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
Android面试题之activity启动流程
Android面试题之activity启动流程总结
加载 初始化 Android 面试题 activity -
详谈Activity的启动模式
在谈Activity的启动模式之前
activity启动 启动模式 日志打印 复用 github -
Python随机生成某段时间内的时间
具体要求是:在一份已知的excel表格中读取学生的学号与姓名,再将这些数据放到新的excel表中的第一列与第二列,最后再生成随机数作为学生的考试成绩。首先要用到的数据库有:xlwt,xlrd,random这三个数据库。命令如下:import xlwtimport xlrdimport random现有一份表格内容如下图:现在我们需要提取这其中的B1—C14。(提示:在对这份电子表格进行操作的时候,
Python随机生成某段时间内的时间 python如何将生成的随机数存入文件中 数据 excel表格 数据库