简介
活动(Activity是一种可以包含用户界面的组件主要用于和用户进行交互。
一、创建项目New Project
选择No Activity,创建一个空活动:
语言选择Java,点击Finish,等待工程加载
二、MainActivity活动类
找到如下图路径:
创建MainActivity类继承AppCompatActivity类,并导入onCreate()方法:
创建布局文件:
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"
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="欢迎学习"
android:textSize="59dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.497"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.468" />
</androidx.constraintlayout.widget.ConstraintLayout>
最总代码:
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
三、AndroidManifest文件中活动注册
所有的活动 都要在 AndroidManifest.xml 中 进行注册才能生效,活动的注册声明要放在<application> 标签内,通过<activity> 标签来对活动进行注册的。standard是活动默认的启动模式,在不进行显式指定的情况下,所有活动都会自动使用这种启动模式。<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools">
<application
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.MyApplication"
tools:targetApi="31" >
<activity 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>
</application>
</manifest>
四、活动模式launchMode
standard
是活动默认的启动模式,在不进行显式指定的情况下,所有活动都会自动使用这种启动模式。在standard模式(即默认情况)下,每当启动一个新的活动,它就会在返回栈中入栈,并处于栈顶的位置。对于使用standard模式的活动,系统 不会在乎这个活动是否已经在返回栈中存在,每次启动都会创建该活动的一个新的实例。如下理解图:
代码:
<activity android:name=".MainActivity"
android:exported="true"
android:launchMode="standard">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
singleTop
当活动的启 动 模式指定 为singleTop,在启 动 活 动时 如果 发现 返回 栈 的 栈顶 已 经 是 该 活 动 , 则认为 可以直接使用它,不会再创 建新的活 动实例。每当想要再启动一个Activity时都会直接使用栈顶的活动,因此Activity也只会有一个实例,仅一次就可以退出程序。不过当Activity并未处于栈顶位置时,这时再启动FirstActivity,还是会创建新的实例的。 如下理解图: 代码: <activity android:name=".MainActivity"
android:exported="true"
android:launchMode="singleTop">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
singleTask
singleTop模式可以很好地解决重复创建栈顶活动的问题,借助singleTask模式来实现 了。当活动的启动模式指定为singleTask,每次启动该活动时系统首先会在返回栈中检查是否存 在该活动的实例,如果发现已经存在则直接使用该实例,并把在这个活动之上的所有活动统统出栈,如果没有发现就会创建一个新的活动实例。如下理解图:
代码:
<activity android:name=".MainActivity"
android:exported="true"
android:launchMode="singleTask">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
singleInstance
不同于以上3种启动模式,指定为singleInstance模式的活动会启用一个新的返回栈 来管理这个活动(其实如果singleTask模式指定了不同的taskAffinity,也会启动一个新的返回栈)。假设我们的程序中有一个活动是允许其他程序调用的,如果我们想实现其他程序和我们的程序可以共享这个活动的实例,应该如何实现 呢?使用前面3种启动模式肯定是做不到的,因为每个应用程序都会有自己的返回栈,同一个活动在不同的返回栈中入栈时必然是创建了新的实例。而使用singleInstance模式就可以解决这个问题,在这种模式下会有一个单独的返回栈来管理这个活动,不管是哪个应用程序来访问这个活动,都共用的同一个返回栈,也就解决了共享活动实例的问题。如下理解图:
代码:
<activity android:name=".MainActivity"
android:exported="true"
android:launchMode="singleInstance">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
五、最终效果
标签:总结,返回,启动,模式,详简,实例,Activity,活动 From: https://blog.csdn.net/m0_74225871/article/details/139531649