经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 移动开发 » Android » 查看文章
Activity的启动模式
来源:cnblogs  作者:chenhongyong  时间:2019/5/16 9:03:58  对本文有异议

 

Android系统采用任务栈的方式来管理Activity实例。

 

栈是后进先出的数据结构。通常一个应用程序对应一个任务栈,默认情况下,每启动一个Activity都会入栈,处于栈顶位置。用户操作的永远都是栈顶的Activity。

 

Activity可以层叠摆放,每启动一个新的Activity都会覆盖在原Activity之上(入栈),单击返回按钮,最上面的Activity会被销毁,下面的Activity重新显示。

 

 

 

Activity有4种启动模式:

1、standard模式

上面介绍的模式就是standard模式。standard模式是Activity默认的启动模式。每启动一个Activity就在栈顶创建一个新的实例。

闹钟通常采用此种模式。

 

2、singleTop模式

如果有时候satndard模式并不合理,比如当前Activity已处于栈顶,再次启动此Activity会重新创建实例,不会直接复用。

singleTop顾名思义,栈顶单例。

将某个Activity的启动模式设置为singleTop,启动此Activity时,会先检查栈顶是否是此Activity的实例,如果是,则直接复用,如果不是,才创建实例。

浏览器的书签通常采用此种模式。

 

3、singleTask模式

singleTop模式有一定的缺陷,当栈中有此Activity的实例,但未处于栈顶时,仍会创建实例,栈中可能会存在此Activity的多个实例。

singleTask,顾名思义,任务栈中只有一个实例。

启动某个Activity时,会先检查任务栈中是否有该Activity的实例,有就直接复用(把前面所有的Activity出栈),没有才创建并入栈。

浏览器的主界面通常采用此模式。

 

4、singleInstance模式

会启动一个新的任务栈来管理当前程序中singleInstance模式启动的Activity,在Android系统中,该Activity只有一个实例。

这种模式主要是为了,在不同程序间共享同一个Activity实例。

启动Activity时,若Android系统中不存在该Activity的实例,则创建并入栈;若已存在,不管此实例位于哪个程序的哪个任务栈中,系统都会把该任务栈转移到前台,显示该实例。

来电界面通常使用此模式。

 

 

 

可在AndroidManifest.xml文件对应的 <activity />元素中用 launchMode属性 指定启动模式:

  1. 1 <activity
  2. 2 android:name=".Activity2"
  3. 3 android:label="@string/title_activity_2"
  4. 4 android:theme="@style/AppTheme.NoActionBar"
  5. 5 android:launchMode="singleTask"> <!-- 指定此Activity的启动模式-->
  6. 6 </activity>

缺省时默认为standard模式。

 

原文链接:http://www.cnblogs.com/chy18883701161/p/10873287.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号