一.Activity组件介绍
1.Activity称为活动组件,通过加载布局XML文件实现界面程序
2.Activity需要在AndroidMainfest中进行注册
3.所有Activity的基类是AppCompatActivity,即若想要复制某一个已有的Activity需要粘贴到AppCompatActivity下
二.Activity的生命周期
1.图示介绍生命周期
在图中可看到Activity所需的生命周期函数
(1)onCreate() :当Activity第一次被创建时调用
(2)onStart() :当Activity显示在屏幕上时调用。此时Activity对用户可见,但还不能接收用户输入
(3)onResume :当Activity能够接收用户输入时调用。此时Activity位于Activity栈的栈顶,是用户当前正在交互的界面
(4)onPause :当Activity进入暂停状态时调用
(5)onStop:当Activity变为不可见时调用。此时Activity已经完全被另一个Activity遮挡住,不再对用户可见。
(6)onDestory:在Activity被终止前调用。此时Activity即将被销毁,可以做一些回收工作和资源的释放
(7)onRestart() :当Activity从停止状态重新进入活动状态时调用。通常发生在用户从其他Activity返回到这个Activity
代码展示
@Override
protected void onRestart() {
super.onRestart();
Log.d("LS","activity2:onRestart...");
}
@Override
protected void onPause() {
super.onPause();
Log.d("LS","activity2:onPause...");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d("LS","activity2:onDestroy...");
}
@Override
protected void onStop() {
super.onStop();
Log.d("LS","activity2:onStop...");
}
@Override
protected void onStart() {
super.onStart();
Log.d("LS","activity2:onStart...");
}
@Override
protected void onResume() {
super.onResume();
Log.d("LS","activity2:onResume...");
}
@Override
protected void onCreate(Bundle savedInstanceState) {
Button button2;
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.activity_main2);
Log.d("zyt","activity2:onCreate...");
button2 = findViewById(R.id.button2);
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent=new Intent(MainActivity2.this,MainActivity.class);
startActivity(intent);
}
});
三.实现两个Activity之间相互跳转并观察生命周期的实例
目标:MainActivity与MainActivity2之间相互跳转
1.创建并注册MainActivity2
2.在AndroidMainfest中设置MainActivity为主启动页面
<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>
3.编辑MainActivity和MainActivity2的java文件中的onCreat函数
.MainActivity中
@Override
protected void onCreate(Bundle savedInstanceState) {
Button button;
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.activity_main);
Log.d("zyt","activity2:onCreate...");
button = findViewById(R.id.button);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent=new Intent(MainActivity.this,MainActivity2.class);
startActivity(intent);
}
});
.MainActivity2
@Override
protected void onCreate(Bundle savedInstanceState) {
Button button2;
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.activity_main2);
Log.d("zyt","activity2:onCreate...");
button2 = findViewById(R.id.button2);
button2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent=new Intent(MainActivity2.this,MainActivity.class);
startActivity(intent);
}
});
修改onCreat()函数是在添加完所有生命周期函数后
4.编辑.MainActivity对应的布局文件和.MainActivity2对应的布局文件
.MainActivity对应的activity_main.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:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/textview1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/activity1"
android:textSize="48sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.498"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.399" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button1"
android:textSize="34sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.462"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.566" />
</androidx.constraintlayout.widget.ConstraintLayout>
.MainActivity对应的activity_main2.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:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/textview2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/activity2"
android:textSize="48sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.444"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.418" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/button2"
android:textSize="34sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.475"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/textview2"
app:layout_constraintVertical_bias="0.104" />
</androidx.constraintlayout.widget.ConstraintLayout>