android入门-Activity的四种启动模式详解
来源:互联网 发布:k歌达人for mac 编辑:程序博客网 时间:2024/05/18 00:47
今天来说一下Android中四大组件之一的Activity的启动模式
第四种模式,singleInstance模式,修改Activity的启动模式,上图
一共有四种,分别为:
- Standard 模式
- singleTop 模式
- singleTask 模式
- singleInstance 模式
上面我介绍了基本概念,我也是从小小白进阶到现在的小白,只看这些概念并不能理解其中的奥妙,所以我写了一个例子,用代码和图片进行详细描述。
代码如下:
这是第一个activity的代码
public class OneActivity extends AppCompatActivity implements View.OnClickListener {
@Bind(R.id.one)
Button one;
@Bind(R.id.two)
Button two;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ButterKnife.bind(this);
initClick();
}
private void initClick() {
one.setOnClickListener(this);
two.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.one:
Intent intent1 = new Intent(this, OneActivity.class);
startActivity(intent1);
break;
case R.id.two:
Intent intent2 = new Intent(this,TwoActivity.class);
startActivity(intent2);
}
}
}
这是第二个activity的代码
public class TwoActivity extends AppCompatActivity implements View.OnClickListener {
@Bind(R.id.one)
Button one;
@Bind(R.id.two)
Button two;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_demo);
ButterKnife.bind(this);
initClick();
}
private void initClick() {
one.setOnClickListener(this);
two.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.one:
Intent intent1 = new Intent(this, OneActivity.class);
startActivity(intent1);
break;
case R.id.two:
Intent intent2 = new Intent(this,TwoActivity.class);
startActivity(intent2);
}
}
}
然后我们在AndroidManifest文件中配置启动模式,当然也可以代码中配置,在最后我会说怎么在代码中配置
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.wq.demo">
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<!-- launchMode 就是启动模式的配置 -->
<activity
android:name=".OneActivity"
android:launchMode="standard">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- launchMode 就是启动模式的配置 -->
<activity
android:name=".TwoActivity"
android:launchMode="standard"></activity>
</application>
</manifest>
然后我们运行
这是运行后的界面
我接下来进行画图演示
我们可以看出来,标准模式下,我们只要打开一个Activity,在栈中都会创建一个实例,就上图来说,我们点击后退键。
- 点击第一次,在栈顶的oneActivity就会出栈,展示的就是twoActivity的界面
- 点击第二次,此时在栈顶的twoActivity就会出栈,展示的就是oneActivity的界面
- 点击第三次,此时在栈顶的oneActivity就会出栈,展示的就是oneActivity的界面
- 点击第四次,我们就会回到桌面了
接下来我们进行第二种模式。
我们只需要在AndroidManifest中把activity的启动模式更改一下即可
<activity
android:name=".TwoActivity"
android:launchMode="singleTop">
</activity>
画图演示:
从上图就可以看出,如果是singleTop模式的twoActivity在栈顶,就会直接复用,不再创建实例入栈,如果我们第3步点击第一个按钮,oneActivity就会进栈,这次我们再次点击第二个按钮,twoActivity就会创建实例入栈,因为当前在栈顶的activity是oneActivity。
按照上图的我们按退出键:
- 第一次点击退出键,在栈顶的twoActivity会出栈,展示的界面是oneActivity
- 第二次点击退出键,在栈顶的oneActivity就会出栈,展示的界面是oneActivity
- 第三次点击退出键,在栈顶的oneActivity就会出栈,回到桌面
接下来我们来说一下第三种启动模式singleTask:修改启动模式的代码我就不贴了,直接上图
如上图,这就是singleTask的特点,只要在栈内存在过次Activity的实例,就会将在它之上的实例全部移除,让其自身处在栈顶
此时,我们点击退出键:
- 第一次点击退出键,twoActivity出栈,展示oneActivity界面
- 第二次点击退出键,oneActivity出栈,展示oneAcitity界面
- 第三次点击退出键,回到桌面
如图,这种模式就是会新创建一个任务栈用来存放实例
当我们点击后退键的时候,因为我们当前在oneActivity的任务栈,所以我们需要点击3次后退键,才会现在twoActivity,当我们再次点击后退键的时候,会回到桌面。
总结一下
standard:标准模式, 开启一个Activity就进栈,到栈顶,关闭一个Activity就出栈。
singleTop: 当一个Activity需要进栈时,会检测现在栈顶的Activity是否是要进栈的Activity,如果是直接复用,不需要重新创建Activity的实例。不是,则创建Activity的实例并进栈,到栈顶。 应用场景:短信查看界面
singleTask: 当一个Activity需要进栈时,会先检测当前栈内是否有该Activity的实例,如果有直接复用,并将其上方其他Activity实例全部清空。应用场景:浏览器的浏览Activity
SingleInstance: 当一个Activity的启动模式设置成SingleInstance时,该Activity启动时会单独创建一个新的任务栈来保存Activity的实例,其他任务栈和该Activity的任务栈是相互独立的,在该基础上开启其他标准的Activity时,任务栈会切换并创建新的标准任务栈的实例。应用场景:打电话的界面 ,phone应用
0 0
- android入门-Activity的四种启动模式详解
- Android入门:Activity四种启动模式
- Android入门:Activity四种启动模式
- Android入门:Activity四种启动模式
- Android入门:Activity四种启动模式
- Android入门:Activity四种启动模式
- Android入门:Activity四种启动模式
- Android入门:Activity四种启动模式
- Android入门:Activity四种启动模式
- Android入门:Activity四种启动模式
- Android入门:Activity四种启动模式
- Android入门:Activity四种启动模式
- Android入门:Activity四种启动模式
- Android入门:Activity四种启动模式
- Android入门:Activity四种启动模式
- Android开发入门之Activity的四种启动模式
- Android中Activity的四种启动模式详解
- Android中Activity的四种启动模式详解(转)
- android中反射技术使用实例
- 【名词】JPA、JTA、JMS、CRUD的解释
- html详解(二)
- 灰度梯度共生矩阵纹理特征
- scala中val function
- android入门-Activity的四种启动模式详解
- Duilib教程-HelloDuilib及DuiDesigner的简单使用
- 我为什么不是清华的学生
- leetcode 122. Best Time to Buy and Sell Stock II-股票交易|贪心算法
- Linux文件属性
- JAVA多线程(一)基本概念和上下文切换性能损耗
- SD卡,SharedPreference以及Pull解析
- 【LeetCode】50. Pow(x, n)
- Spring实现AOP的4种方式(转)