千家信息网

如何理解Activity启动模式

发表于:2025-01-16 作者:千家信息网编辑
千家信息网最后更新 2025年01月16日,如何理解Activity启动模式,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Activity的启动模式有四种,stan
千家信息网最后更新 2025年01月16日如何理解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安全错误 数据库的锁怎样保障安全 删除数据文件属于数据库管理吗 深圳先行者网络技术有限公司 新闻出版广播影视网络安全 网络安全启动仪式礼品 显卡坏了网络安全模式能玩么 江苏网络安全价格信息 自行查询网络技术的核心产品 苹果代理服务器 我的世界中搭建服务器 警惕网络安全隐患标语 数据库的服务器名应该填啥 mc自己的服务器可以开单人吗 松江区市场软件开发报价方案 服务器监测软件哪个好用 郑州佰道互联网科技有限公司 开封计算机网络技术专业 ceic数据库进不去 谈谈对数据库应用技术的理解 上海管理网络技术服务哪家好 数据库字段值怎么算 如果没有卫星还可以使用服务器吗 互联网未来金融科技怎么走 美国网络安全局 数据库删除列失败 麦积保密和网络安全承诺书 增补数据存入数据库 生死狙击2服务器下次开服时间 数据库连接上后不能执行 巴萨网络安全 黔东南州网络安全
0