一、Standard模式


步骤

1.在activity_main.xml中添加一个按钮

 <Button
        android:id="@+id/Main_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="MainActivity"
        android:textSize="30dp" />

2.然后在MainActivity.java中添加监听按钮事件

public class MainActivity extends AppCompatActivity {
   

    @Override
    protected void onCreate(Bundle savedInstanceState) {
   
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);
        Button mBtn1 =(Button) findViewById(R.id.Main_btn);
        mBtn1.setOnClickListener(new View.OnClickListener() {
   
            @Override
            public void onClick(View v) {
   
            //ntent是一个多用途的通信工具,Intent类有很多构造方法,以满足不同的应用需要。此处,intent用来告诉ActivityManager该启动那个activity
                Intent intent=new Intent(MainActivity.this,Activity1.class);
                startActivity(intent);
            }});
        Log.v("BootMode","MainActivity onCreate()");
    }

}

3.通过点击按钮事件,让MainActivity启动Activity1,Activity1启动Activity2,Activity2启动Activity3
那么我们就需要创建三个子页面:

这个过程帮我们做了三件事情: 1.为我们新建了一个activity.xml文件,2.为我们新建了一个activity.java文件,3.为我们在AndroidManifest.xml中增加了java文件的配置。

4.之后就在三个新建的Activity的xml和java文件中添加相应代码:(例如Activity1)
Activity_1.xml

  <Button
        android:id="@+id/btn1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Activity1"
        android:textSize="30dp" />

Activity.java

public class Activity1 extends AppCompatActivity {
   

    @Override
    protected void onCreate(Bundle savedInstanceState) {
   
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_1);
        Button mBtn1 =(Button) findViewById(R.id.btn1);
        mBtn1.setOnClickListener(new View.OnClickListener() {
   
            @Override
            public void onClick(View v) {
   
                Intent intent=new Intent(Activity1.this,Activity2.class);
                startActivity(intent);
            }});
        Log.v("BootMode","Activity1 onCreate()");
    }
}

测试结果:每点击一次,都会重新创建

二、singTop模式

情况一:验证思路及步骤

步骤

1.首先我们更改Activity3的java代码:让它自己跳转自己,目的就是让该页面始终在栈顶。

在AndroidManifest.xml中添加设定:

运行后:当页面在activity3时无论再怎么点击,都不会再新建页面了。
测试结果:

情况二:验证思路及步骤

步骤

还原到最初后,如果我们在AndroidManifest.xml中给MainActivity设定


注意将之前更改Activity3.java的代码还原:

Intent intent=new Intent(Activity3.this,MainActivity.class);
                startActivity(intent);

那么当页面加载到activity3之后,再点击按钮,由于MainActivity不在栈顶,所以依旧会重新创建。
测试结果:

三、singleTask模式

步骤

1.修改MainActivity的启动方式:

2.然后分别在Activity1、Activity2、Activity3的java文件中重载onDestroy():

测试结果:

四、singleInstance模式

步骤

首先给Activity3添加启动方式,并删除之前测试的启动方式:

然后修改每个Activity的java文件,在其OnCreate方法里调用方法getTaskId(),获取任务栈的栈号,并打印出来:

测试结果:

附录1:Logcat的使用



例如tag所指代的名称:

附录2:最终源代码

activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<ndroidx.constraintlayout.widget.ConstraintLayout 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:layout_height="match_parent"
    tools:context=".MainActivity"
    android:orientation="vertical">
  <Button
        android:id="@+id/Main_btn"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="MainActivity"
        android:textSize="30dp" />
</ndroidx.constraintlayout.widget.ConstraintLayout>

MainActivity.java

public class MainActivity extends AppCompatActivity {
   

    @Override
    protected void onCreate(Bundle savedInstanceState) {
   
        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_NO_TITLE);
        setContentView(R.layout.activity_main);
        Button mBtn1 =(Button) findViewById(R.id.Main_btn);
        mBtn1.setOnClickListener(new View.OnClickListener() {
   
            @Override
            public void onClick(View v) {
   
                Intent intent=new Intent(MainActivity.this,Activity1.class);
                startActivity(intent);
            }});
        Log.v("BootMode","MainActivity onCreate(),任务栈号为:"+getTaskId());
    }

}

示例:

activity_1.xml

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout 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:layout_height="match_parent"
    tools:context=".Activity1">
    <Button
        android:id="@+id/btn1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Activity1"
        android:textSize="30dp" />
</androidx.constraintlayout.widget.ConstraintLayout>

Activity1.java

public class Activity1 extends AppCompatActivity {
   

    @Override
    protected void onCreate(Bundle savedInstanceState) {
   
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_1);
        Button mBtn1 =(Button) findViewById(R.id.btn1);
        mBtn1.setOnClickListener(new View.OnClickListener() {
   
            @Override
            public void onClick(View v) {
   
                Intent intent=new Intent(Activity1.this,Activity2.class);
                startActivity(intent);
            }});
        Log.v("BootMode","Activity1 onCreate(),任务栈号为:"+getTaskId());
    }

    @Override
    protected void onDestroy() {
   
        super.onDestroy();Log.v("BootMode","Activity1 onDestroy()");
    }

}