Android四大组件之Activity<中>
来源:互联网 发布:淘宝怎么买食品 编辑:程序博客网 时间:2024/06/16 02:55
- 四种启动模式
a.standard
b.singleTop
c.singleTask
d.singleInstanstance - 启动方式
a.xml文件
b.代码设置标志位 - Activity的Flags
一.为什么需要启动模式。在默认的情况下,我们多次启动同一个activity时,系统会创建多个实例并把它们一一放入任务栈中,当我们按back键时,会发现这些activity会一一回退,任务栈是一种”后进先出”的栈结构。多次启动同一个activity,系统会重复创建多个实例,在默认的启动模式就是这样的,这样看起来很傻。于是启动模式来了。
1.standard模式:标准模式,也是系统默认模式。每次启动一个activity都会重新创建新的实例。不管这个实例存在不存在,创建出来的实例的声明周期都符合典型的activity周期,onCreate,onStart,onResume都会调用。一个任务栈可以有多个相同的实例。每个实例也可以属于不同的任务栈。在这种模式下,谁启动了这个activity,那这个activity的就运行在启动它的那个activity所在的栈中,比如:activityA启动了activityB(B是标准模式),那么B就会进入到A所在的栈中。
如果我们使用ApplicationContext去启动stardard模式的activity时会报错,错误如下:
这是因为stardard标准模式下的activity默认会进入启动它的activity所属的任务栈中,但是由于非activity类型的context(如AppcationContext)并没有所谓的任务栈,所以出错!解决方案就是为待启动的activity指定FLAG_ACTIVITY_NEW_TASK标记位,这样启动的时候就会为它创建新的任务栈。这时候待启动activity实际上就是以singleTask模式启动的。后续解释。
2.singleTop:栈顶复用模式。很好理解,如果新的activity已经位于任务栈的栈顶,那么此activity不会被重新创建。同时它的onNewIntent方法会被回调。通过此参数我们可以得到请求的信息。这时该activity的oncreate.onstart不会调用。如果这个activity不位于栈顶,那么还是会创建新的实例。举个例子。目前栈内情况ABCD,D是栈顶。这个时候需要再次启动D(D启动模式是singleTop),那么栈内还是ABCD.如果D的启动模式是stardard,那么栈内是ABCDD.
3.singleTask:栈内复用模式。这是一种单例模式。只要栈内存在该activity的实例,那么多次启动activity都不会创建新的实例。和singtop一样。都会回调onNewIntent方法。并把该activity直接放到栈顶,然后把该实例的之上的activity实例会clear掉。具有clearTop的效果。
4.singleInstance:单实例模式。这个加强版的singleTask模式。除了具有singleTask特点之外。它的特性是该activity的实例只能存在一个任务栈中。除非该任务栈被销毁,否则永不会创建新的activity实例。
二.启动方式:
a.AndroidManifest.xml文件配置:
b.代码设置标志位:
注意:b方式比a方式优先级更高。两种同时存在,以b方式为准。两者在限定范围不同,如:a方式无法为activity设置FLAG_ACTIVITY_CLEAR_TOP标志。而b方式无法为activity设置singleInstance模式。
三.Activity的Flags(常用的)
1.Flag_Activity_New_Task
为Activity指定“sinlgeTask”启动模式。效果和xml配置该启动模式一样
2.Flag_Activity_Single_Top
为Activity指定“sinlgeTop”启动模式。效果和xml配置该启动模式一样
3.Flag_Activity_Clear_Top
一般会和singleTask启动模式一起出现。具有此标记位的acitivity.当它启动时,在同一个任务栈中所有位于它上面的Activity都要出栈。
4.Flag_Activity_EXCLUDE_FROM_RECENTS
具有此标记的Activity将不会出现在历史Activity中。有些时候我们不希望用户通过历史列表回到我们的Activity,这个标记就有用。等同于android:excludeFromRecents=”true”;
- Android四大组件之Activity(中)
- Android四大组件之Activity<中>
- Android四大组件之Activity
- Android四大组件之Activity
- Android四大组件之Activity
- Android四大组件之Activity
- android四大组件之Activity
- android四大组件之Activity
- android四大组件之Activity
- android四大组件之Activity
- android四大组件之 Activity
- Android四大组件之Activity
- Android四大组件之Activity
- Android四大组件之Activity
- Android四大组件之Activity
- Android四大组件之Activity
- Android 四大组件之Activity
- android 四大组件之activity
- 1121: 电梯
- BitmapUtil 工具类
- spring autowired
- servlet与cgi的区别与关系(1)--两者区别
- Maven学习(五)-- 聚合与继承
- Android四大组件之Activity<中>
- leetcode 287. Find the Duplicate Number
- (3)在Action中用request、session、application和前端简单数据、对象数据传递到后端
- MATLAB 区域生长 连通区域计算 曲线的断点查询
- Python 爬虫之 selenium 爬虫,模拟浏览器爬取天猫信息
- 获取app中所有activity集合
- Python爬虫XPATH
- 横向滑动菜单Tablayout,点击选项给下面的viewpager中的fragment传值
- Hadoop 2.8 集群的安装