在 AndroidManifest.xml 文件中更改 android:launchMode=" "
standard、singleTask、singleTop、singleInstance、singleInstancePerTask
standard 启动模式: 默认模式
android:launchMode="standard"
a—>b ab;
跳转几个界面就要 点击 返回几次 才可退出.
<activity
android:launchMode="standard"
android:name=".MainActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
singleTop启动模式:
android:launchMode="singleTop"
顶部存在相同界面将不会跳转,跳转界面时 如果存在有相同的 就不会跳转,返回退出时跳转了几次,返回几次就好。
a -> b = ab ; ab -> b= ab ; ab -> a = aba; aba->a = aba;aba ->b= abab
a界面跳b页面, b页面在上方 在跳转到b ,b页面在顶部不会跳转, 如跳转a页面会成功,
同理aba ,跳转到a界面 ,a界面已经存在 ,不会跳转;
退出:栈同理 后进先出 b—> a —> b —>a 退程序 返回4次退出程序
singleTask 启动模式
android:launchMode="singleTask"
只针对栈底
a—>b—>c = abc ; a 界面 跳到 b界面 跳到 c 界面
abc —>a = a ; abc界面跳到a界面, a 界面在最下面 发现又跳转a界面 , 此时就变成 只剩 a界面了 ,点击一次返回就退出程序了
singleInstance启动模式
android:launchMode="singlestance"
单例,没有相同的界面, 不管页面怎么跳转,始终只有一个单独的界面,没有重复的
a—>b —>c =abc; 3个界面,
abc ->a = cba; 跳转 a 界面时 发现 a 已经存在,直接到a 不会出现重复的
abc ->b = acb; 跳转 b 界面时 发现 b 已经存在,直接到b 不会出现重复的
退出: 有几个就退出几次 acb b ->c ->a 3次 退出
singleInstancePerTask启动模式
android:launchMode="singleInstancePerTask"
没明白 演示可以一直跳,然后跳了几次 返回几次,原路返回,感觉和 standard 默认的一样
代码:A主界面 MainActivity.java
package com.example.mostandard;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
private Button btnA,btnB,btnC;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnA = findViewById(R.id.btn_a_a);
btnB = findViewById(R.id.btn_a_b);
btnC = findViewById(R.id.btn_a_c);
// a 跳转 a
btnA.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// standard 模式 自己跳转自己
startActivity(new Intent(MainActivity.this, MainActivity.class));
}
});
//a 跳 b
btnB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this, BBActivity.class));
}
});
//a 跳 c
btnC.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(MainActivity.this, CCActivity.class));
}
});
}
}
BBActivity.java
package com.example.mostandard;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class BBActivity extends AppCompatActivity {
private Button btnA,btnB,btnC;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_bbactivity);
btnA = findViewById(R.id.btn_b_a);
btnB = findViewById(R.id.btn_b_b);
btnC = findViewById(R.id.btn_b_c);
//b 跳 a
btnA.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(BBActivity.this, MainActivity.class));
}
});
// b 跳 b
btnB.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(BBActivity.this, BBActivity.class));
}
});
//b 跳 C
btnC.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
startActivity(new Intent(BBActivity.this, CCActivity.class));
}
});
}
}
CCActivity.java
package com.example.mostandard;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class CCActivity extends AppCompatActivity implements View.OnClickListener{
private Button btnA,btnB,btnC;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_ccactivity);
btnA = findViewById(R.id.btn_c_a);
btnB = findViewById(R.id.btn_c_b);
btnC = findViewById(R.id.btn_c_c);
//事件
btnA.setOnClickListener(this);
btnB.setOnClickListener(this);
btnC.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.btn_c_a) {
//c 跳 a
startActivity(new Intent(CCActivity.this, MainActivity.class));
} else if (v.getId() == R.id.btn_c_b) {
// c 跳 b
startActivity(new Intent(CCActivity.this, BBActivity.class));
} else if (v.getId() == R.id.btn_c_c) {
//c 跳 c
startActivity(new Intent(CCActivity.this, CCActivity.class));
}
}
}
主界面布局 activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="A-Activity视图"
android:textSize="24sp"
/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btn_a_a"
android:text="跳转到视图A"
android:textSize="24sp"
/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btn_a_b"
android:text="跳转到视图b"
android:textSize="24sp"
/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btn_a_c"
android:text="跳转到视图c"
android:textSize="24sp"
/>
</LinearLayout>
B界面 activity_bbactivity.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:orientation="vertical"
android:layout_height="match_parent"
tools:context=".BBActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="B-Activity视图"
android:textSize="24sp"
/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btn_b_a"
android:text="跳转到视图A"
android:textSize="24sp"
/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btn_b_b"
android:text="跳转到视图b"
android:textSize="24sp"
/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btn_b_c"
android:text="跳转到视图c"
android:textSize="24sp"
/>
</LinearLayout>
C界面 activity_ccactivity.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".CCActivity">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="C-Activity视图"
android:textSize="24sp"
/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btn_c_a"
android:text="跳转到视图A"
android:textSize="24sp"
/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btn_c_b"
android:text="跳转到视图b"
android:textSize="24sp"
/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/btn_c_c"
android:text="跳转到视图c"
android:textSize="24sp"
/>
</LinearLayout>