Activity启动模式
来源:互联网 发布:软件p光头 编辑:程序博客网 时间:2024/06/05 17:32
开始
下面来讨论一下Activity的4种启动模式:
1.standard(系统默认),
2.singleTop,
3.singleTask,
4.singleInstance,
了解Activity启动模式之前,先补充一下Android中task容器栈的知识,其实就是Activity的一个容器集合,所有的Activity实例都是存放在这个容器栈里面。其实就是数据结构中栈是一个原理:先进后出,后进先出,所有操作都是发生在栈顶。
现在假设有4个Activity:A,B,C,D
standard模式
standard模式是默认的启动模式。
伪代码如下 :
StartActivity(A);StartActivity(B);StartActivity(C);StartActivity(D);
执行完后Activity栈中是这样的,如下图:
singleTop模式
如果在任务的栈顶正好存在该Activity的实例, 就重用该实例,否者就会创建新的实例并放入栈顶(即使栈中已经存在该Activity实例,只要不在栈顶,都会创建实例)。
举例说明:(现在假设A是singleTop模式)
伪代码如下:
StartActivity(A);StartActivity(A);StartActivity(B);StartActivity(A);StartActivity(A);
执行完后Activity栈中是这样的,如下图:
singleTask模式
被启动的Activity在同一个Task内只有一个Activity实例,具体分为如下三种情况:
<1>.如果启动的目标Activity不存在Task栈中,系统将会创建一个目标Activity实例,并将它加入到Task栈顶
<2>.如果启动的目标Activity已存在Task栈顶,此时模式和singleTop模式相同
<3>.若果启动的目标Activity已存在但没有位于Task栈顶,系统将会把该目标Activity上面的所有Activity移除Task栈,使该Activity置于Task栈顶
举例说明(现在假设A是singleTask模式)
StartActivity(A);StartActivity(B);StartActivity(c);StartActivity(D);StartActivity(A);
singleInstance模式
这种加载模式下,无论从哪个Task中启动目标Activity,只会创建一个目标Activity实例,并会使用一个全新的Task栈来装载该Activity实例。具体可分为两种情况:
<1>.如果创建的目标Activity不存在,系统先会创建一个全新的Task,接着创建一个Activity实例,然后将该目标Activity加入到新的Task栈顶
<2>.如果创建的目标Activity已经存在,无论在哪个Task栈中,系统将会把Activity所在的栈置于前台。
注意:采用singleInstance加载模式的Activity总是位于Task栈顶,并且Activity所在的Task栈只包含该Activity。
举例说明(现在假设A是singleInstance模式)
StartActivity(A);StartActivity(B);StartActivity(c);StartActivity(A);StartActivity(D);
请注意:有以下几点奇怪的地方需要注意
1.执行完上面代码后,如果现在我们一步一步的返回,顺序是这个的D->C->B->主页->A
2.执行完上面代码后,如果从D返回应该是到C,而不是到A!
3.执行完上面代码后,如果用户点击了Home键,则再也回不到A的界面了。如果想解决这个问题,可以为A在Manifest.xml文件中的声明加上:
<intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter>
加上这段之后,也就是说该程序中有两个这种声明,另一个就是那个正常的根activity,在打成apk包安装之后,在程序列表中能看到两个图标,但是如果都运行的话,在任务管理器中其实也只有一个。上面的情况点击A的那个图标就能回到它的界面(比如A中有一个EditText,以前输入的内容,现在回到之后依然存在)。
intent-filter中
<action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" />
两个过滤条件缺一不可,才会在程序列表中添加一个图标,图标下的显示文字是android:label设定的字符串。
结尾
好了就说到这吧,谢谢大家指正。
- android Activity启动模式
- Android Activity启动模式
- activity启动模式详解
- Activity启动模式1
- activity的启动模式
- Activity有四种启动模式
- Activity启动模式
- activity启动模式分析
- Activity的启动模式
- Activity 启动模式
- Activity启动模式
- Activity的启动模式
- Activity 启动模式
- Activity启动模式总结
- Activity的启动模式
- Activity的启动模式
- Activity 启动模式
- Activity启动模式
- linux环境下新建weblogic域
- 用Redis的set指令实现锁
- SevletContext
- ASCII控制字符和ASCII可显示字符
- Copy List with Random Pointer
- Activity启动模式
- UNIX网络编程笔记(7)—名字与地址转换
- 基于正则表达式的数据抓包
- JAVA——管道流
- Java Web基础学习(一)
- Git & Github建立与使用
- Java内存区域与内存溢出异常
- C++ Primer Plus 第六版_编程练习(1)(Chapter_two 1-7)
- 详解Android中AsyncTask的使用