Activity的四种启动模式
注:
1.Android系统通过任务栈来管理所有的Activity实例 .
2.栈存放Activity时,满足 “先进后出”.
3.大多数情况下 , 一个应用程序是由多个Activity组件组成的 , 同时一个Activity组件对应一个xml文件 , 对应用程序的多个界面 . 我们不可能只在一个界面进行操作 , 当我们从一个界面进入另一个界面的时候(也就是从一个Activity中开启另一个Activity的时候) . 为了方便假设我们的应用程序有2个Activity组件 , 分别是Activity1和Activity2 , 我们从Activity1所在的界面跳到Activit2所在的界面的时候 , 开启Activity2的方式有4种.
4.也就是说我们可以给每一个的Activity设置一个启动模式.
1.standard模式
1. 不同的Activity在同一个栈中
2.系统不会判断启动的Activity是否在栈中存在,每次启动都会创建一个新的Activity实例.
2.singleTop模式
1. 不同的Activity在同一个栈中
2系统不会判断启动的Activity是否在栈中存在.但是,当启动的Activity已经位于栈顶的时候,则直接使用它,而不创建新的实例.若不位于栈顶,则会创建一个新的实例.
3.singleTask模式
1. 不同的Activity在同一个栈中.
2.每次启动该Activity时,系统首先会检查栈中是否存在该Activity的实例,如果发现存在该Activity的实例,并将该Activity实例之上的所有的Activity出栈.如果没有发现则创建一个新的Activity.
4.singleInstance模式(重点)
1. 不同的Activity在不同的栈中.
例子:
4个xml文件:
content_main.xml
content_2.xml
content_3.xml
content_4.xml
4个Activity组件:
MainActivity
Activity2
Activity3
Activity4
content_main.xml 界面以及主要代码
4个界面的布局都是一样的布局,一个TextView和4个Button(所以我在这儿只显示了一个布局视图)
<?xml version="1.0" encoding="utf-8"?>
<android.support.constraint.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"
app:layout_behavior="@string/appbar_scrolling_view_behavior"
tools:context=".MainActivity"
tools:showIn="@layout/activity_main">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Activity1"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<Button
android:id="@+id/Activity1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Activity1"/>
<Button
android:id="@+id/Activity2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Activity2"/>
<Button
android:id="@+id/Activity3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Activity3"/>
<Button
android:id="@+id/Activity4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
andro