Activity的中文意思是“活动”,它是Android应用中负责与用户交互的组件,相当于Swing编程中的JFrame组件。与其不同的是,JFrame本身可以设置布局管理器,不断地向其添加组件,而Activity只能通过setContentView(View)来显示布局文件中已经定义的组件。
Activity的生命周期可以简化为6个过程
- onCreate()
- onStrat()
- onResume()
- onPause()
- onStop()
- onDestory()
下面的实验将会让我们体会到Activity生命周期的变化过程
本次实验Android Studio版本
运行环境
- Windows 10
- Android Studio Arctic Fox (2020.3.1)
- jdk1.7.0_67
1. 首先新建一个项目,并新建一个Activity文件
2. 在旧版本的Android Studio中创建了新的Activity,必须到 app/manifests/AndroidMainfests.xml
中注册新创建的Activity,除非你在File中新建,系统会自动为你注册。
旧版本需要在AndroidMainfests.xml中添加的代码为
<activity
android:name=".SecondActivity"
android:exported="true" />
在该文件中你还可以定义开发项目的首页面,也就是app的初始页面,这里我将app的初始页面更改为了SecondActivity,代码如下
<activity
android:name=".MainActivity"
android:exported="true" />
<activity
android:name=".SecondActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
3. 在新建的activity_second.xml中添加一个Button按钮
<Button
android:id="@+id/btn"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="test"/>
注意:此文件布局使用的是LinearLayout
4. 在SecondActivity.java中对Button设置监听,并设置Intent启动组件,System.out.println指令是为了在Activity经历不同生命周期时能用日志的形式输出出来,以便于我们观察。我们可以在要插入的位置右键,点击Generate,选择Override Methods,选择 onCreate(),onStrat(),onResume(),onPause(),onStop(),onDestory()这6项,代码会自动生成出来。在每一个重写代码块中添加
System.out.println("===========SecondActivity OnCustom===========");
//Custom由代码块决定
5. 在MainActivity.java中也加入输出代码,使其生命周期变化过程以日志形式输出
6. 运行Android模拟器,在下方找到logcat,点击,选择Verbose,并输入System.out,这样可以过滤掉对我们没用的信息
点击我们设置的TEST按钮,在logcat中就能看到两个Activity的生命周期过程了
部分代码
//SecondActivity.java
package com.xxx.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class SecondActivity extends AppCompatActivity {
//此处btn必须与布局文件中Button的id一致
private Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
System.out.println("===========SecondActivity OnCreate===========");
//对Button按钮设置监听
btn=(Button)this.findViewById(R.id.btn);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//此处SecondActivity和MainActivity位置不能随意设置,前一个跳转到后一个
Intent intent=new Intent(SecondActivity.this,MainActivity.class);
startActivity(intent);
}
});
}
@Override
protected void onStart() {
super.onStart();
System.out.println("===========SecondActivity OnStart===========");
}
@Override
protected void onStop() {
super.onStop();
System.out.println("===========SecondActivity onStop===========");
}
@Override
protected void onDestroy() {
super.onDestroy();
System.out.println("===========SecondActivity onDestroy===========");
}
@Override
protected void onPause() {
super.onPause();
System.out.println("===========SecondActivity onPause===========");
}
@Override
protected void onResume() {
super.onResume();
System.out.println("===========SecondActivity onResume===========");
}
@Override
protected void onRestart() {
super.onRestart();
System.out.println("===========SecondActivity onRestart===========");
}
}