本节学习Activity的加载模式。可能就会问,什么是加载模式? 加载方式有什么用途? 这是因为Android系统对Activity是采用Task栈来管理的。Task栈是采用先进后出的方式,先启动的Activity放在栈底,后启动的Activity是放在栈顶。

Activity共有四种加载方式:

1:standard:标准模式,同时也是默认的加载方式

2:singleTop:Task栈顶单例模式

3:singleTask:Task栈内单例模式

4:singleInstance:全局单例模式

下面举例说明四种加载模式。

1. stardard加载模式

Activity逻辑代码:

public class FirstActivity extends Activity {private TextView textView;private Button   button;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.activity_first);textView = (TextView)findViewById(R.id.textView1);button = (Button)findViewById(R.id.button1);String string = "Activity_id: "+this.toString()+ "\n"+ "task_id: " + this.getTaskId();textView.setText(string);button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {//自己启动自己
Intent intent = new Intent(FirstActivity.this, FirstActivity.class);startActivity(intent);}});}
}

布局文件就一个TextView和一个Button,大家自行编写

记得全局配置文件中Activity的加载模式,必须配置为Standard

以下是运行效果:

可以明显的看出,当我按三次加上刚进来的第一次,共四次。 可以明显的看出,四次的Activity的id是不一样的,TaskId是一样的。

这说明了,当加载方式是Standard的时候,当我们向实例话Activity时,总是为我们重新创建一个Activity,但这些Activity都是位于同一个Task中的。当然了,如果向全部推出,就需要按四次Back键才会完全退出。

上图就是FirstActivity的栈示意图

2:singleTop模式

这种模式分两种情况:

a: 当此Activity位于栈顶

上面的FirstActivity代码不变(为了让大家看到我确实按下了,当我按下时我会设置button的值),此时配置文件中的加载模式改为singleTop

演示效果如下:

通过上图可以看到,当加载模式是singleTop的话,并且次Activity位于栈顶,每次实例化FirstActivity,却只是实例化一次。

b:当出现如下图这种情况时

我们新建一个SecondActivity,此Activity的加载模式是Stardard

public class SecondActivity extends Activity {private TextView textView;private Button   button;@Overrideprotected void onCreate(Bundle savedInstanceState) {// TODO Auto-generated method stubsuper.onCreate(savedInstanceState);setContentView(R.layout.activity_second);textView = (TextView)findViewById(R.id.textView1);button = (Button)findViewById(R.id.button1);String string = "Activity_id: "+this.toString()+ "\n"+ "task_id: " + this.getTaskId();textView.setText(string);button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubIntent intent = new Intent(SecondActivity.this, FirstActivity.class);startActivity(intent);}});}
}

此时FirstActivity中的Intent就不是启动自己了,是启动SecondActivity。

     button.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View arg0) {// TODO Auto-generated method stubIntent intent = new Intent(FirstActivity.this, SecondActivity.class);startActivity(intent);++count;button.setText("button: " + count);}});

运行效果如下:

此时栈里的情况为:

可以说明,SingleTop加载模式是: 如果此Activity是位于栈顶的,再次加载就不用实例话。如果不位于栈顶,那么加载时还必须实例化。

3:singTask加载模式:

此种加载模式分为3中:

a: 如果要启动的Activity不存在,那就实例化并加入栈顶

b:如果要启动的Activity存在,并且位于栈顶,那就不需要实例化(这种情况就是SingleTop加载模式)

c:如果要启动的Activity存在,但是不位于栈顶,那就需要将目标Activity上面的Activity全部出栈。

我们就分析c这种情况:

代码不用改变,只需要将FirstActivity配置为SingleTask模式

运行效果如下:

4:singleInstance加载模式:

代码不用改动,只需将配置文件中FirstActivity改为singleInstace加载模式

运行效果如下:

可以看的,FirstActivity与SecondActivity是不位于同一个栈,可以明显看到Taskid=12的栈中就唯一存在一个FirstActivity

可以看出singleInstace加载模式,系统保证无论从那个Task中启动目标Activity,知会创建一个目标Activity实例,并使用一个全新的Task类管理该Activity实例。

好。 今天Activity的启动模式就说到这里

Android 四大组件学习之Activity七相关推荐

  1. Android四大组件之——Activity的生命周期(图文详解)

        转载请在文章开头处注明本博客网址:http://www.cnblogs.com/JohnTsai       联系方式:JohnTsai.Work@gmail.com       [Andro ...

  2. Android四大组件之——Activity(一)定义、状态和后退栈(图文详解)

    什么是Activity 关键字:应用组件.四大组件.用户界面,交互. An Activity is an application component that provides a screen wi ...

  3. Android——四大组件、六大布局、五大存储

    一.android四大组件 (一)android四大组件详解 Android四大组件分别为activity.service.content provider.broadcast receiver. 1 ...

  4. Android四大组件和启动模式(面试总结)

    一.Android四大组件详解 Android四大组件分别为Activity.Service.Content Provider.Broadcast Receiver. 1.Activity (1)一个 ...

  5. Kotlin第七章: Android四大组件

    1. 四大组件 四大组件是每一个Android人必须要会,要掌握的知识点,因为他们是我们在日常开发工作中打交道最频繁的组件,而且他们四个在不同的领域扮演着极其重要的角色. Activity: 负责用户 ...

  6. 重温Android四大组件(一)—Activity的生命周期

    前言 四大组件对于Android开发者是老生常谈的知识了,相信每个Android开发者对四大组件都已经很熟悉了.但是四大组件作为Android应用的基础,作为开发者不仅要熟悉而且要烂熟于心. 这里以& ...

  7. android的四大组件及使用场景,Android/四大组件/Activity.md · BoraxZYF/AndroidInterview - Gitee.com...

    ## 四大组件 ## Activity ### Activity 的四种启动模式及使用场景 - standard 标准模式,Activity 的默认启动模式.每次启动一个 Activity 时都会创建 ...

  8. 第六课-Android四大组件之Activity

    Activity是Android四大组件之一,它是个控制类,主要控制界面的加载显示,用户交互处理,数据的获取,数据的传送等.在它的onCreate方法中的setContentView方法就是来加载一个 ...

  9. Android四大组件之Activity(第一篇-简单使用)

    Android四大组件之Activity(第一篇-简单使用) 前言 一.Activity是什么? 二.如何使用 1.继承 2.重写onCreate() 总结 文章目录 前言 一.Activity是什么 ...

  10. Android四大组件之——Broadcast学习总结

    1.Broadcast概念 是一个全局的监听器,属于Android四大组件之一.Broadcast(广播)是一种广泛运用的在应用程序(APP)之间传输信息的机制.而BroadcastReceiver( ...

最新文章

  1. C 语言编程 — 输入/输出与文件操作
  2. Python 爬虫 大量数据清洗 ---- sql语句优化
  3. 配置System Center Data Protection Manager 2007
  4. 将这五个原则变成习惯,你的开发经验更值钱!
  5. Vue为何采用异步渲染
  6. 品牌的mysql数据库监控_zabbix实现mysql数据库的监控(四)
  7. 基于JAVA+SpringBoot+Mybatis+MYSQL的旅游管理系统
  8. VC++6.0 内存泄露(Memory Leaks)征兆1
  9. laravel Migration与Seeder的用法
  10. srgb色彩空间_网页设计师的色彩:了解sRGB
  11. 联发科MTK(3G,4G,5G)核心板/芯片简介
  12. 工程师“魔改” AirPods Pro 接口,苹果“妥协”将成大势所趋?
  13. Windows重定向技术【文件重定向与注册表重定向】
  14. tp6框架结合阿里短信接口发送短信并记录redis
  15. Stacks of Flapjacks UVA 薄饼排序问题
  16. win7计算机无法启动,Win7 64位系统电脑无法开机进不了系统的解决方法【图】
  17. 端午节主题模板--Ideappt原创PPT模板系列
  18. 在公司没事做的时候很心虚
  19. 近期AI创业公司总结
  20. 关于光源的明场和暗场照明

热门文章

  1. JAVA学习第六十三课 — 关于client服务端 amp;amp; URL类 amp; URLConnection
  2. BZOJ 3160: 万径人踪灭 [fft manacher]
  3. javascript笔记——图片大小检测
  4. 美图秀秀美化图片之【增强】模块界面与功能设计
  5. java 按字节读文件_JAVA按字节读取文件的简单实例
  6. Mutes锁_递归锁_信号量semaphore
  7. 如何查询redhat的版本信息
  8. MySQL双主机双Master方案测试
  9. OkHttp3用法全解析
  10. SpringMVC 的运行流程