Activity启动模式(launchMode)详解
1.standard
standard是Activity默认的启动模式,在不进行显示指定的情况下,所有活动都会自动使用这种启动模式。
每次启动都一个新的Activity位于栈顶。
android:launchMode="standard",此时每次点击按钮都会创建新的Activity
现在,我们写一个简单的按钮 ,实现跳转Activity
private Button button; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.e("MainActivity",this.toString()); button = (Button)findViewById(R.id.button); button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent intent = new Intent(MainActivity.this, MainActivity.class); startActivity(intent); } }); }
虽然跳转的页面相同,但是在Task中每点一次按钮就会创建一个新的Activity
Activity创建日志
启动示例图
2.singleTop
当Activity的启动模式为singleTop时,当启动的Activity已经处于Activity栈顶时,则直接使用。
android:launchMode="singleTop"
我们创建NextActivity,并且在MainActivity中添加button2
private Button button1,button2; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Log.e("MainActivity", this.toString()); button1 = (Button) findViewById(R.id.button1); button2 = (Button) findViewById(R.id.button2); button1.setOnClickListener(this); button2.setOnClickListener(this); } @Override public void onClick(View view) { switch (view.getId()){ case R.id.button1: Intent intent = new Intent(MainActivity.this, MainActivity.class); startActivity(intent); break; case R.id.button2: Intent intent2 = new Intent(this, NextActivity.class); startActivity(intent2); break; } }
此时在MainActivity中启动MainActivity,则Activity栈中只会创建一次;但是先启动NextActivity之后再启动MainActivity,则会创建新的MainActivity,因为此时的Activity栈顶是NextActivity
MainActivity - MainActivity - MainActivity
MainActivity - NextActivity - MainActivity
启动示例图
3.singleTask
当活动的启动模式为singleTask时,启动该Activity会现在栈中检查是否已存在,若存在则直接将该活动之上的Activity全部出栈。
android:launchMode="singleTask"
启动示例图
4.singleInstance
singleInstance模式下会有一个单独的返回栈来管理活动。不管哪个应用程序来访问该活动,都共用同一个栈,这样就可以允许其他程序调用,实现共享该活动。
android:launchMode="singleInstance"
启动示例图
图中启动的过程是:Main - New - Next 这个过程很容易看懂
返回过程是:Next - Main - New
明显看出顺序不一样,为什么会出现这种情况呢?
NextActivity和MainActivity处于同一个栈,当我们返回时,NextActivity出栈,此时栈A中还存在MainActivity,并且处于栈顶,所以会看到MainActivity.
当MainActivity执行返回时,栈A会清空,然后我们就看到了位于栈B的NewActivity。
之后NewActivity出栈,栈B也为空时,App退出。
Activity的启动模式简单介绍到这里, 希望对您有所帮助,有不足或者错误的地方请指正。
后面会每星期至少一篇跟新本系列,感兴趣可以关注。
一起学习,一起进步。
本文作者:佚名 来源:51CTO 原文标题:Activity启动模式(launchMode)详解相关文章
- B9:备忘录模式 Memento
- Activity启动模式(launchMode)详解
- mongodb3.0.1副本集安装部署(仲裁节点模式)
- 迭代器模式
- 设计模式(三)-- 适配器模式(Adapter)
- protobuffer的前世今生(五)——在Java中的两种使用方式之注解模式
- (二十一)状态模式详解(DOTA版)
- (十九)组合模式详解
- Java设计模式之五大创建型模式(附实例和详解)
- 设计模式之桥接模式(Bridge)详解及代码示例
- 设计模式之建造者模式(Bulider模式)详解及代码示例
- 设计模式之Future模式详解及代码示例
- 详解23种设计模式(基于Java)—— 结构型模式(三 / 五)
- java设计模式之适配器模式
- 并行设计模式(一)-- Future模式
- Linux·I/O模式及select、poll、epoll详解
- js--单例模式--补充案例--登录框
- I3C总线HDR模式研读
- Javascript 严格模式详解
- WCF技术剖析之五:利用ASP.NET兼容模式创建支持会话(Session)的WCF服务
- 六种不同的结对编程模式对比
- JBPM与设计模式之职责链模式
- OpenHarmony轻量系统开发【9】WiFi之STA模式连接热点
- freemarker null异常详解及兼容模式