一、启动模式介绍

启动模式简单地说就是Activity启动时的策略,在AndroidManifest.xml中的<Activity>标签的android:launchMode属性设置;
启动模式有4种,分别为standard、singleTop、singleTask、singleInstance;
讲解启动模式之前,有必要先讲解一下“任务栈”的概念;
 
任务栈
 
每个应用都有一个任务栈,是用来存放Activity的,功能类似于函数调用的栈,先后顺序代表了Activity的出现顺序;比如Activity1-->Activity2-->Activity3,则任务栈为:
 
启动模式
 
 
(1)standard:每次激活Activity时(startActivity),都创建Activity实例,并放入任务栈;【达内3G培训】
(2)singleTop:如果某个Activity自己激活自己,即任务栈栈顶就是该Activity,则不需要创建,其余情况都要创建Activity实例;
(3)singleTask:如果要激活的那个Activity在任务栈中存在该实例,则不需要创建,只需要把此Activity放入栈顶,并把该Activity以上的Activity实例都pop;
(4)singleInstance:如果应用1的任务栈中创建了MainActivity实例,如果应用2也要激活MainActivity,则不需要创建,两应用共享该Activity实例;【达内3G培训】
 
 
 
二、代码实例
 
 
1.standard
 
 
场景描述:MainActivity点击按钮激活自己,但是MainActivity的引用发生改变;
 
效果:
 
 
 
AndroidManifest.xml
 
[java] view plaincopyprint?
  1. <activity
  2. android:name=".MainActivity"
  3. android:label="@string/app_name" android:launchMode="standard">
 
MainActivity.java
 
[java] view plaincopyprint?
  1. package com.xiazdong.launchmode;
  2. import android.app.Activity;
  3. import android.content.Intent;
  4. import android.os.Bundle;
  5. import android.view.View;
  6. import android.view.View.OnClickListener;
  7. import android.widget.Button;
  8. import android.widget.TextView;
  9. publicclass MainActivity extends Activity {
  10. private Button standardButton;
  11. private TextView showView;
  12. private OnClickListener listener = new OnClickListener(){
  13. @Override
  14. publicvoid onClick(View v) {
  15. Intent intent = new Intent(MainActivity.this,MainActivity.class);
  16. startActivity(intent);
  17. }
  18. };
  19. @Override
  20. publicvoid onCreate(Bundle savedInstanceState) {
  21. super.onCreate(savedInstanceState);
  22. setContentView(R.layout.main);
  23. showView = (TextView)this.findViewById(R.id.showview);
  24. standardButton = (Button)this.findViewById(R.id.standard);
  25. standardButton.setOnClickListener(listener);
  26. showView.setText(this.toString());
  27. }
  28. }
2.singleTop
 
 
场景描述:MainActivity自己激活自己,但是MainActivity并没有创建实例,即引用不变;
 
效果:【达内3G培训】
 
 
AndroidManifest.xml
 
[html] view plaincopyprint?
  1. <activity
  2. android:name=".MainActivity"
  3. android:label="@string/app_name"android:launchMode="singleTop">

MainActivity.java

 
[java] view plaincopyprint?
  1. package com.xiazdong.launchmode;
  2. import android.app.Activity;
  3. import android.content.Intent;
  4. import android.os.Bundle;
  5. import android.view.View;
  6. import android.view.View.OnClickListener;
  7. import android.widget.Button;
  8. import android.widget.TextView;
  9. publicclass MainActivity extends Activity {
  10. private Button standardButton;
  11. private TextView showView;
  12. private OnClickListener listener = new OnClickListener(){
  13. @Override
  14. publicvoid onClick(View v) {
  15. Intent intent = new Intent(MainActivity.this,MainActivity.class);
  16. startActivity(intent);
  17. }
  18. };
  19. @Override
  20. publicvoid onCreate(Bundle savedInstanceState) {
  21. super.onCreate(savedInstanceState);
  22. setContentView(R.layout.main);
  23. showView = (TextView)this.findViewById(R.id.showview);
  24. standardButton = (Button)this.findViewById(R.id.standard);
  25. standardButton.setOnClickListener(listener);
  26. showView.setText(this.toString());
  27. }
  28. }

3.singleTask
 
 
场景描述:
 
MainActivity 的启动模式为singleTask,MainActivity激活OtherActivity,然后OtherActivity激活 MainActivity,发现MainActivity引用不变,然后MainActivity再次激活OtherActivity,但是 OtherActivity的引用变了;
 
效果:
 
 
 
AndroidManifest.xml
 
[html] view plaincopyprint?
  1. <activity
  2. android:name=".MainActivity"
  3. android:label="MainActivity"android:launchMode="singleTask">
  4. </activity>
  5. <activity
  6. android:name=".OtherActivity"android:launchMode="singleTask"android:label="OtherActivity"
  7. ></activity>

MainActivity和OtherActivity就是简单的代码,略;

 
 
4.singleInstance
 
 
场景描述:App1应用和App2应用分别激活SingleInstance应用的MainActivity,发现两个应用激活后MainActivity的引用一样;
 
效果:
 
 
 
SingleInstance的AndroidManifest.xml
 
[html] view plaincopyprint?
  1. <activity
  2. android:name=".MainActivity"
  3. android:label="@string/app_name"android:launchMode="singleInstance">

转载于:https://www.cnblogs.com/Codenewbie/archive/2013/04/19/3031006.html

Android入门之Activity四种启动模式相关推荐

  1. Android入门:Activity四种启动模式

    2019独角兽企业重金招聘Python工程师标准>>> 一.启动模式介绍 启动模式简单地说就是Activity启动时的策略,在Android Manifest.xml中的标签的and ...

  2. Activity四种启动模式详细整理

    Activity四种启动模式详细整理 1.Standard standard模式,顾名思议就是标准启动模式,默认启动模式. 一个Activity如果不知道它的启动模式,那么它就是按Standard模式 ...

  3. Android Activity的launchMode四种启动模式备忘

    Android Activity的launchMode四种启动模式备忘 Android的Activity的启动模式有四种,在AndroidManifest.xml通过配置Activity的androi ...

  4. Android中Activity的四种启动模式

    每次看到这种专有词汇都十分佩服创造者的智慧,创造者一定和我一样都中二,我已然确信. 我写博客的目的,就是希望不断磨练自己,让自己能够不将一件简单的事情讲的复杂,让自己能将一件复杂的事情讲的简单.嘛嘛, ...

  5. Activity的四种启动模式应用场景

    在这金三银四的时间里一个哥们忽然一本正经的问我Activity的启动模式和具体的应用模式:我也一想是啊,平是不太注意结果到了 关键的时刻卡壳了,感觉未雨绸缪一下,做个记录: 一.Activity四种启 ...

  6. Android学习-Kotlin语言入门-变量、函数、语法糖、when、for-in、主构造函数、单例类、函数式API、集合遍历、隐式Intent、Activity生命周期、四种启动模式、标准函数

    探究java语言的运行机制 变量.函数.语法糖 when条件语句 for循环 主构造函数.次构造函数 数据类和单例类 集合的创建与遍历 集合的函数式API 创建菜单 隐式使用Intent Activi ...

  7. Android Activity:四种启动模式,Intent Flags和任务栈(转自他人博客)

    在Android中每个界面都是一个Activity,切换界面操作其实是多个不同Activity之间的实例化操作.那各个页面跳转关系如何决定呢?如果启动了顺序启动了ABCD的Activiy,如何从D调回 ...

  8. android的四种启动模式,(转)彻底弄懂Activity四大启动模式

    原地址:https://blog..net/mynameishuangshuai/article/details/51491074 最近有几位朋友给我留言,让我谈一下对Activity启动模式的理解. ...

  9. Activity的四种启动模式-图文并茂

    1.对于使用standard 模式的活动,系统不会在乎这个活动是否已经在返回栈中存在,每次启动都会创建该活动的一个新的实例. 例如A启动A,A再接着启动A,A继续启动A,然后再分别出栈,如图所示 2. ...

最新文章

  1. 《代码阅读方法与实践之读书笔记之一》
  2. ECMAScript 6 Features 中文版
  3. 【Android 安全】DEX 加密 ( Java 工具开发 | 解压 apk 文件 | 加密生成 dex 文件 | 打包未签名 apk 文件 | 文件解压缩相关代码 )
  4. 一些关于Viewport与device-width的东西~(转)
  5. Sharepoint学习笔记—ECM系列—1 Content Type Syndication
  6. Java面试知识点:Date类、异常
  7. 查找练习 hash——出现过的数字
  8. python文件转换成jar包_Python一键转Jar包,Java调用Python新姿势!
  9. 【算法学习笔记】16.暴力求解法04 回溯法03 剪枝法 带宽
  10. awd赛题的flag是什么意思_记一次AWD自动获取flag并提交
  11. 【python数据处理】替代Excel三维地图依据经纬度坐标的绘制热力地图的方式
  12. Android SDK怎么救砖,Android手机刷机变砖后无法开机的修复方法
  13. 清理android根目录垃圾,安卓清理君——清除手机垃圾
  14. stm32闪存的理解
  15. 世界上最著名也最危险的APT恶意软件清单
  16. 网络拥塞控制,对越远的流量越宽容
  17. 码字 层映射 预编码的概念总结
  18. 浏览器开发者选项取消已在调试程序中暂停
  19. 《算法和数据结构》LeetCode 篇
  20. sudo日志文件跟踪

热门文章

  1. 网络安全工具——CS多人合作平台
  2. 新员工入职表_员工培训
  3. UISlider 滑动条-滑块大小、不能滑动、不能拖动
  4. 人事管理系统开发功能需求
  5. 微信小程序+Echarts实现中国地图
  6. Don’t Forget the I/O When Allocating Your LLC ISCA 2021
  7. 在职读研是一条困难但正确的路——中国人民大学与加拿大女王大学金融硕士
  8. 建筑行业工业互联网平台的商业价值
  9. 《电脑编程技巧与维护》2011年第24期刊登出《DB 查询分析器》批量执行DML语句并返回更详细的信息
  10. 使用吉布斯采样求解LDA模型