APP开发实战59-Activity启动模式
2016-06-20 21:41
459 查看
16 Activity介绍
16.1Activity启动方式
16.1.1启动模式
(1)Standard模式这是系统默认的模式,每次启动Activity都会重新创建一个新的Activity实例,也就是onCreate,onStart,onResume流程走一遍,并且一个任务栈里允许存在多个实例。
当我们使用ApplicationContext去启动Activity的时候,因为默认是standard模式会报错:Calling startActivity()from outside of an Activity context requires the FLAG_ACTIVITY_NEW_TASK flag.Is this really what you want?
因为standard 模式默认启动的Activity会和启动它的Activity在同一任务栈,而由于ApplicationContext非Activity的Context,并没有所谓的任务栈,所以提示我们需要使用FLAG_ACTIVITY_NEW_TASK来新建一个任务栈并把启动的Activity放进去。
(2)SingleTop模式
在同一个任务栈中栈顶如果有此Activity的实例,那么不会重新创建一个新实例,而是调用此Activity的onNewIntent,此时onCreate、onStart不会被调用。但如果此Activity在同一个任务栈但不在栈顶或之前用Standard模式启动的,就会重新创建。
如ADBCD(第一个D不在栈顶则重新创建),ABCDD(第一个D为Standard模式启动也会重新创建)。
(3)SingleTask模式
在同一个任务栈(注意:不一定是栈顶了)中如果有此Activity的实例,那么不会重新创建一个新实例,而是调用此Activity的onNewIntent,此时onCreate、onStart不会被调用。并且自带FLAG_ACTIVITY_CLEAR_TOP效果。
同一个栈内,如ADBC(要启动D,则把D挪到栈顶,BC由于clearTop而被移除栈,剩下AD)。
如果D指定栈为S2,android:taskAffinity="S2",而启动它的Activity栈为S1,则先创建S2栈然后再new D放到S2中。
SingleTask模式属于比较常用的启动模式。
(4)SingleInstance模式
这是一种加强的singleTask模式。除了singleTask模式所有特性外,它只能单独在一个任务栈中,跟其他Activity不能同时存在一个任务栈,整个Application也只有一个实例。
相关文章推荐
- android5.0用UsageStatsManager来获取程序运行时间
- Android中的Activity4中启动模式使用场景
- leetcode 202 Happy Number
- ios学习路线—Objective-C(nil与release的区别与用法)
- iOS学习- 23 Core Data by Tutorials - CH03
- Android Studio教程--Android Studio 2.1安装与配置
- 安卓中计算 TextView 的宽高、打点
- 移动开发,touchstart轮播图,移动端拖拽应用
- git的创建新项目的使用
- Android-Android studio 出现 Error: NDK integration is deprecated in the current plugin. 问题解决
- 常用iOS的第三方框架
- iOS 判断字符串中含有某个字符串
- Ojective-C入门请读
- iOS_逆向_使用class dump导出头文件
- android 连接 wcf rest注意点
- iOS_逆向_使用dumpdecrypted砸壳
- App 版本信息等
- iOS webView加载网页失败,浏览器成功的原因,以及读取cookie
- 不同厂家的电脑进入bios的快捷键整理汇总
- Android(Java)之多线程结果返回——Future 、FutureTask、Callable、Runnable