文章目录
一、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()");
}
}