如何理解Activity启动模式

如何理解Activity启动模式,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

Activity的启动模式有四种,standard、singleTop、singleTask、singleInstance.

如何理解Activity启动模式

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启动模式

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

如何理解Activity启动模式

MainActivity ->MainActivity ->MainActivity

如何理解Activity启动模式

MainActivity -> NextActivity -> MainActivity

如何理解Activity启动模式

启动示例图

3.singleTask

当活动的启动模式为singleTask时,启动该Activity会现在栈中检查是否已存在,若存在则直接将该活动之上的Activity全部出栈。

android:launchMode="singleTask"

如何理解Activity启动模式

启动示例图

4.singleInstance

singleInstance模式下会有一个单独的返回栈来管理活动。不管哪个应用程序来访问该活动,都共用同一个栈,这样就可以允许其他程序调用,实现共享该活动。

android:launchMode="singleInstance"

如何理解Activity启动模式

启动示例图

图中启动的过程是:Main -> New -> Next 这个过程很容易看懂

返回过程是:Next -> Main -> New

明显看出顺序不一样,为什么会出现这种情况呢?

NextActivity和MainActivity处于同一个栈,当我们返回时,NextActivity出栈,此时栈A中还存在MainActivity,并且处于栈顶,所以会看到MainActivity.

当MainActivity执行返回时,栈A会清空,然后我们就看到了位于栈B的NewActivity。

之后NewActivity出栈,栈B也为空时,App退出。

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。

原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/204688.html

(0)
上一篇 2021年11月29日
下一篇 2021年11月29日

相关推荐

发表回复

登录后才能评论