在 AndroidManifest.xml 文件中更改 android:launchMode=" "
standard、singleTask、singleTop、singleInstance、singleInstancePerTask
standard 启动模式: 默认模式
android:launchMode="standard"
a—>b ab;
跳转几个界面就要 点击 返回几次 才可退出.
<activityandroid: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;@Overrideprotected 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 跳转 abtnA.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {// standard 模式 自己跳转自己startActivity(new Intent(MainActivity.this, MainActivity.class));}});//a 跳 bbtnB.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {startActivity(new Intent(MainActivity.this, BBActivity.class));}});//a 跳 cbtnC.setOnClickListener(new View.OnClickListener() {@Overridepublic 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;@Overrideprotected 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 跳 abtnA.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {startActivity(new Intent(BBActivity.this, MainActivity.class));}});// b 跳 bbtnB.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {startActivity(new Intent(BBActivity.this, BBActivity.class));}});//b 跳 CbtnC.setOnClickListener(new View.OnClickListener() {@Overridepublic 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;@Overrideprotected 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);}@Overridepublic void onClick(View v) {if (v.getId() == R.id.btn_c_a) {//c 跳 astartActivity(new Intent(CCActivity.this, MainActivity.class));} else if (v.getId() == R.id.btn_c_b) {// c 跳 bstartActivity(new Intent(CCActivity.this, BBActivity.class));} else if (v.getId() == R.id.btn_c_c) {//c 跳 cstartActivity(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"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="A-Activity视图"android:textSize="24sp"/><Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/btn_a_a"android:text="跳转到视图A"android:textSize="24sp"/><Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/btn_a_b"android:text="跳转到视图b"android:textSize="24sp"/><Buttonandroid: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"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="B-Activity视图"android:textSize="24sp"/><Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/btn_b_a"android:text="跳转到视图A"android:textSize="24sp"/><Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/btn_b_b"android:text="跳转到视图b"android:textSize="24sp"/><Buttonandroid: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"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="C-Activity视图"android:textSize="24sp"/><Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/btn_c_a"android:text="跳转到视图A"android:textSize="24sp"/><Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/btn_c_b"android:text="跳转到视图b"android:textSize="24sp"/><Buttonandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/btn_c_c"android:text="跳转到视图c"android:textSize="24sp"/></LinearLayout>