千家信息网

如何理解Activity启动模式

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,如何理解Activity启动模式,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Activity的启动模式有四种,stan
千家信息网最后更新 2026年11月01日如何理解Activity启动模式

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

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

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退出。

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

模式 活动 会创 示例 按钮 过程 情况 程序 帮助 明显 清楚 相同 内容 对此 应用程序 文章 新手 日志 是在 更多 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 湖南永感互联网科技有限公司 互联网 科技公司 鑫亿盛互联网科技 南京欣网互联网科技 上海致骋互联网科技 齐家互联网科技有限公司 长亮科技互联网金融 国外互联网科技网站 互联网科技创新企业排名 互联网科技博主是什么意思 广州慧亚互联网科技怎么样 哈尔滨屹滨互联网科技有限公司 工业互联网等科技实现智能化赋能 科技互联网的核心竞争力 互联网科技股为什么大涨 互联网科技接地气 保山互联网科技靠谱吗 易租星互联网科技有限公司 广州三三互联网科技有限公司 盐城市攀科互联网科技有限公司 重生之互联网科技帝国 美国互联网保险保险科技 互联网金融公司科技 科技互联网创业计划书 隆华科技工业互联网 阿大互联网科技有限公司 恒生互联网科技指数跳水 内蒙古九一互联网科技 中国互联网公司的科技投入 悟空问答互联网科技
0