Activity的四种启动模式
来源:互联网 发布:原子力显微镜知乎 编辑:程序博客网 时间:2024/06/08 15:51
Activity的launchMode一共有四个可选值:standard、singleTop、singleTask和singleInstance
四者的概念:
1. Standared模式(默认)
默认的Activity启动方式,这种模式的Activity的特点是:只要你创建了一个该Activity的实例并处于活动状态,就会向任务栈(task)顶加入这个新创建的实例,无论当前任务栈中是否已经有同样的该Activity实例。退出该Activity时会在任务栈顶弹出该实例。
2. SingleTop模式
这种模式的Activity特点是,当要创建的新的Activity实例,已经在任务栈中存在并正处于栈顶,则这个新的Activity实例不会被创建,而是重用当前处于任务栈顶端的那个Activity实例并调用一下栈顶Activity实例的onNewIntent方法。如果同样的Activity虽然在任务栈中存在,但是此时并不处于任务栈顶,那么就会创建新的Activity实例并放在任务栈顶端。
3. SingleTask模式
这种模式的Activity特点是,当要创建的新的Activity实例时,如果任务栈中已经存在该模式的Activity实例,则这个新的Activity实例不会被创建,而是把栈中同样实例以上的所有Activity实例全部移除后将那个同样的Activity实例置于任务栈的顶端,此时除了会调用栈中这个Activity的相关生命周期方法外,还会调用这个Activity的onNewIntent方法。如果任务栈中不存在同样的Activity,就重新创建一个新的Activity实例并放在任务栈顶端。
4. SingleInstance模式
这种模式的Activity特点是,当该模式Activity实例在任务栈中创建后,它会独占一条任务栈。如果要重复创建该Activity实例,每次只是激活已经存在的该类型Activity,并且会调用该Activity的onNewIntent方法。此模式一般用于加载较慢的,比较耗性能且不需要每次都重新创建的Activity。
然后看一下具体的示例:假设有3个Activity,分别为A,B,C。A为主启动Activity,A中有2个按钮,分别用来启动B和C;B中有2个按钮,分别用来启动B(即自己启动自己)和C,C中有一个按钮用来启动A。
当我设置B的模式为standard的时候,我依次做如下的启动操作A->B->B->A,栈中的Activity会有四个,且从栈底到栈顶的顺序就是A->B->B->A;
当我设置B的模式为singleTop的时候,我依次做如下的启动操作A->B->B->A,栈中的Activity会有三个,且从栈底到栈顶的顺序就是A->B->A;原因是,第二次操作从B中启动B的时候,因为B已经在栈顶,所以不会再启动另外一个B,只会调用一下B的onNewIntent方法。
但是我更改一下启动顺序为A->B->A->B,此时栈中的Activity会有四个,且从栈底到栈顶的顺序就是A->B->A->B;
当我设置B的模式为singleTask的时候,我依次做如下的启动操作A->B->A->C->A->B,此时栈中的Activity只会有2个,从栈底到栈顶的顺序是A->B。原因是当第五次操作从A启动B的时候,因为任务栈中已经有B,所以会把当前任务栈中B上面的由下到上的A、C、A三个Activity全部弹出销毁,并将那个B置于栈顶端。B在回到栈顶端的过程中会回调onRestart-->onStart-->onResume生命周期方法,同时还会回调自己的onNewIntent方法。
当我设置B的启动模式为singleInstance的时候,我依次做如下的启动操作A->B->A->C->A->B,此时会有两个任务栈,栈1中由下到上依次存放的Activity是A->A->C->A,栈2中有一个Activity就是B。原因是,当程序启动时,A作为主启动Activity会开辟一个任务栈(称其为栈1),当A启动B时,会再为B单独开启一个任务栈(称其为栈2)并将B放入,当B启动C时,会将C放入栈1中,随后C启动A也是再栈1中,A再次启动B时,会激活栈2中已经存在的B,此时B会成为屏幕上与用户交互的Activity,并且B的onNewIntent方法会被调用。
最后说一下在一个Activity中按下Back键和按下Home键时会执行的生命周期方法:
按下Back键,意味着当前Activity的销毁,所以执行的生命周期方法依次是:onPause-->onStop-->onDestroy
按下Home键,返回到主屏幕,当前Activity并不会销毁,但是也不可见了。所以执行的生命周期方法依次是:onPause-->onStop,当用户通过某种方式返回到该app时,该Activity会重新回到活动状态,所以执行的生命周期方法依次是:onRestart-->onStart-->onResume。
- Activity的四种启动模式
- Activity的四种启动模式
- Activity的四种启动模式2
- Activity的四种启动模式
- activity的四种启动模式
- Activity启动的四种模式
- Activity的四种启动模式
- activity 的四种启动模式
- activity 的四种启动模式
- 分析Activity的四种启动模式
- Activity的四种启动模式
- Activity的四种启动模式
- Activity的四种启动模式
- Activity 四种启动模式的区别
- Activity的四种启动模式
- activity 的四种启动模式
- Activity的四种启动模式
- Activity的四种启动模式(LaunchMode)
- CentOS 7.0 yum安装Apache、PHP和MySQL
- linux crypt函数
- servlet详解
- unity资源管理
- Android中Bitmap和Drawable
- Activity的四种启动模式
- 求int型数据在内存中存储时1的个数
- MyBatis 判断条件为等于的问题
- 斯坦福兔子和其他图形学模型数据下载
- 叹息只因常会失落
- Android项目中运行Java应用程序出错:Fatal Error: Invalid Layout of java.lang.String at value
- 1006--<Property>
- 第十六周阅读程序:异常处理和命名空间
- Android之自定义(上方标题随ViewPager手势慢慢滑动)