activity启动模式在特定的业务场景下会使用到,而且面试的时候也喜欢问,废话不多说,用例子去实现下,新建一个android项目laucherActivity,新建几个类,如果:


activity_main.xml

    


为了其效果明显,我们把开启的Activity加入到集合中,方便我们判断,

public class ActivityUtil {private static final ActivityUtil instance = new ActivityUtil();public List activies = new ArrayList();private ActivityUtil(){};public static ActivityUtil getInstance(){return instance;}public void add(Activity act){activies.add(act);}}

一个简单的类在每个activity中都添加 ActivityUtil.getInstance().add(this);这句代码即可,现在每个activity节点android:launchMode没有任何配置,就是默认的启动模式,默认启动的模式是standard

主界面图:


现在点击5次启动自己的button,然后再点击activity个数:


可以看到如果activity的启动模式为standard时,启动activity,就会创建新的activity,这样如果启动过多的话,是比较占内存的,所以为什么做项目中,如果把一些不需要的界面finish(),

当我们在MainActivity中启动A_Activity 再在A_Activity中启动MainActivity再启动自己结果应该是这样的

MainActivity---->A_Activity_MainActivity_MainActivity

先跟大家说下所有的activity都是存在一个叫任务栈中,我们知道栈的结构是先进后出,如图:


这图没做好,请见谅,现在把MainActivity的启动模式配置为singleTop,现在看集合中有多少个activity

只要MainActivity在任务栈的栈顶时,再点击启动MainActivity时,并不会启动MainActivity,点击启动其他Activity都行所有singleTop启动模式就清楚了,

singleTop:当要启动的Activity在栈顶时,这个时候就不会启动此Activity,

下面看看另一个启动模式singleTask

现在是这样的,在MainActivity中启动A然后A启动B然后B启动MainActivity,算起来是启动了4个Activity,过程:

Main_A_B_Main,但是我只要点击返回键 就退出应用了,说明当要启动的Activity在栈中,会把他前面的activity都杀死,那就是为什么在B中点击启动MainActivity点击返回键就退出了应用

还有最后一种模式就是singleInstance,我们也模仿上面的行为,发现当我们点击后退键的时候,要点击三次才退出应用,说明有三个activity存在,但是我明明启动的是四个activity啊,由此发现其实在B界面中启动Main..界面时,由于MainActivity启动模式设置为了singleInstance,它会新开一个任务栈,和之前的任务栈不一样,因此之前的任务栈是保留3个activity,这就解析了为什么点击三次后退键退出应用了,




更多相关文章

  1. android 模拟器启动报错:Failed to open the HAX device!
  2. vue 移动端实现输入框居中
  3. Cocos2d-x 3.0的启动流程
  4. Android(安卓)ViewGroup 触摸事件传递机制
  5. Android(安卓)– 切换夜间模式
  6. Android启动器(Launcher)开发详解
  7. Android(安卓)5.1 Lollipop Phone工作流程浅析(十三)__InCallAct
  8. 【区块链】Android通过Geth RPC接口实现接入以太坊私有链
  9. (四十一) Android(安卓)O SystemServer初探

随机推荐

  1. Android的WiFi子系统架构
  2. 做纯粹的 Android
  3. android 图片剪裁 ,从android自带图库提取
  4. android桌面画面循环滑动
  5. Android资源文件夹及资源文件的详细介绍
  6. Android定时任务的实现方式
  7. 19 个 Android(安卓)开发工具
  8. Android升级联盟再次失败
  9. Android中的矩阵(Matrix)变换
  10. [置顶] Android(安卓)之 Binder与进程间