Activity的中文意思是“活动”,它是Android应用中负责与用户交互的组件,相当于Swing编程中的JFrame组件。与其不同的是,JFrame本身可以设置布局管理器,不断地向其添加组件,而Activity只能通过setContentView(View)来显示布局文件中已经定义的组件。

Activity的生命周期可以简化为6个过程

  • onCreate()
  • onStrat()
  • onResume()
  • onPause()
  • onStop()
  • onDestory()
    下面的实验将会让我们体会到Activity生命周期的变化过程

Android Studio
Android Studio

本次实验Android Studio版本
运行环境

  • Windows 10
  • Android Studio Arctic Fox (2020.3.1)
  • jdk1.7.0_67

1. 首先新建一个项目,并新建一个Activity文件

20210928231620.jpg
20210928231620.jpg

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" />

20210928232150.jpg
20210928232150.jpg

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,这样可以过滤掉对我们没用的信息

20210928235920.jpg
20210928235920.jpg

点击我们设置的TEST按钮,在logcat中就能看到两个Activity的生命周期过程了
20210929000123.jpg
20210929000123.jpg

部分代码

//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===========");
    }
}