singleInstance启动模式
2015-08-18 11:36
435 查看
Android Activity的启动模式有多种,我们已经学习过“singleTop”,“standard”这两种模式。下面我们将介绍另外两种启动模式“singleTask”和“singleInstance”。
复制粘贴工程“10_activity启动模式singletop”,命名为“11_activity启动模式-singletask”。在清单文件中配置SecondActivity的启动模式为“singleTask”,代码如例1-1
例1-1
<activity
android:name="com.itheima.taskstack.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.itheima.taskstack.SecondActivity"
android:launchMode="singleTask"
></activity>
复制代码
运行程序,此时任务栈创建,并将MainActivity即01入栈,效果如图1-1所示:
![](http://bbs.itcast.cn/data/attachment/forum/201503/12/155647z6f8ma7x558a63m5.png)
点击“开启界面02“按钮,打开SecondActivity即02入栈;然后点击”开启界面01“按钮即01再次入栈;接着点击” 开启界面01 “,则01又入栈;最后点击”开启界面02“,此时应用跳转到SecondActivity所在的页面,任务栈在这一过程中变化如下图1-2所示:
![](http://bbs.itcast.cn/data/attachment/forum/201503/12/155733tzn3zmuzid4in4s3.png)
从图1-2可知:由于SecondActivity的启动模式为“singleTask“,故在任务栈中只能存在一个该Activity的入栈实例。当02入栈时,若任务栈中已经存在该任务实体,则复用该实体并使该实体处于栈顶。若要退出图1-2到系统桌面,此时我们只需要点击”BACK“按键两次。
复制粘贴工程“10_activity启动模式-singletop”,命名为“12_activity启动模式-singleinstance”。在清单文件中配置SecondActivity的启动模式为“singleInstance”,代码如例1-2
例1-2
<activity
android:name="com.itheima.taskstack.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.itheima.taskstack.SecondActivity"
android:launchMode="singleInstance "
></activity>
复制代码
运行程序,此时任务栈创建,并将MainActivity即01入栈,效果如图1-13所示:
![](http://bbs.itcast.cn/data/attachment/forum/201503/12/155931s28azqyuyvbmbzyd.png)
点击“开启界面02“按钮,打开SecondActivity即02入栈;然后点击”开启界面01“按钮即01再次入栈;点击“Back”此时01出栈;再次点击“Back”此时01再次出栈,此时01所在的任务栈清空但02所在的任务栈仍存在。这一过程变化如下图1-4所示:
![](http://bbs.itcast.cn/data/attachment/forum/201503/12/160009hx3oy4zyzzmm4m3h.png)
从图1-4可知:在点击“开启界面02”时,由于SecondActivity的启动模式为“singleInstance”,这种启动模式非常特殊,此时02会入栈到自己的任务栈中,02和01分别在不同的任务栈中;再次点击“开启界面01”按钮,则01再次入栈;点击“Back”则01出栈,再次点击“Back”则01再次出栈,此时01所在的任务栈清空,但02所在的任务栈仍存在。
Activity有四种启动模式,下面是我们对这四种启动模式的总结,具体如下表1-1:
![](http://bbs.itcast.cn/data/attachment/forum/201503/12/160358y0ucfctq0oqetyoo.png)
表1-1
http://pan.baidu.com/s/1qWLVGLI
单一任务模式 |
例1-1
<activity
android:name="com.itheima.taskstack.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.itheima.taskstack.SecondActivity"
android:launchMode="singleTask"
></activity>
复制代码
运行程序,此时任务栈创建,并将MainActivity即01入栈,效果如图1-1所示:
![](http://bbs.itcast.cn/data/attachment/forum/201503/12/155647z6f8ma7x558a63m5.png)
点击“开启界面02“按钮,打开SecondActivity即02入栈;然后点击”开启界面01“按钮即01再次入栈;接着点击” 开启界面01 “,则01又入栈;最后点击”开启界面02“,此时应用跳转到SecondActivity所在的页面,任务栈在这一过程中变化如下图1-2所示:
![](http://bbs.itcast.cn/data/attachment/forum/201503/12/155733tzn3zmuzid4in4s3.png)
从图1-2可知:由于SecondActivity的启动模式为“singleTask“,故在任务栈中只能存在一个该Activity的入栈实例。当02入栈时,若任务栈中已经存在该任务实体,则复用该实体并使该实体处于栈顶。若要退出图1-2到系统桌面,此时我们只需要点击”BACK“按键两次。
单一实例模式 |
例1-2
<activity
android:name="com.itheima.taskstack.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name="com.itheima.taskstack.SecondActivity"
android:launchMode="singleInstance "
></activity>
复制代码
运行程序,此时任务栈创建,并将MainActivity即01入栈,效果如图1-13所示:
![](http://bbs.itcast.cn/data/attachment/forum/201503/12/155931s28azqyuyvbmbzyd.png)
点击“开启界面02“按钮,打开SecondActivity即02入栈;然后点击”开启界面01“按钮即01再次入栈;点击“Back”此时01出栈;再次点击“Back”此时01再次出栈,此时01所在的任务栈清空但02所在的任务栈仍存在。这一过程变化如下图1-4所示:
![](http://bbs.itcast.cn/data/attachment/forum/201503/12/160009hx3oy4zyzzmm4m3h.png)
从图1-4可知:在点击“开启界面02”时,由于SecondActivity的启动模式为“singleInstance”,这种启动模式非常特殊,此时02会入栈到自己的任务栈中,02和01分别在不同的任务栈中;再次点击“开启界面01”按钮,则01再次入栈;点击“Back”则01出栈,再次点击“Back”则01再次出栈,此时01所在的任务栈清空,但02所在的任务栈仍存在。
总结 |
![](http://bbs.itcast.cn/data/attachment/forum/201503/12/160358y0ucfctq0oqetyoo.png)
表1-1
配套文档与对应高清视频下载 |
在线视频 |
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- Android IPC进程间通讯机制
- Android Manifest 用法
- [转载]Activity中ConfigChanges属性的用法
- Android之获取手机上的图片和视频缩略图thumbnails
- Android之使用Http协议实现文件上传功能
- Android学习笔记(二九):嵌入浏览器
- android string.xml文件中的整型和string型代替
- i-jetty环境搭配与编译
- android之定时器AlarmManager
- android wifi 无线调试
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- android 代码实现控件之间的间距
- android FragmentPagerAdapter的“标准”配置
- Android"解决"onTouch和onClick的冲突问题
- android:installLocation简析
- android searchView的关闭事件
- SourceProvider.getJniDirectories