Android四大组件之Activity深入解读生命周期

Android四大组件之Activity深入解读生命周期

在Android开发中,Activity是最基本的组件之一。它提供了屏幕展示、用户交互等功能。掌握Activity的生命周期是非常重要的,这里将对Activity的生命周期进行详细解读。

Activity的生命周期

Activity的生命周期包含7种状态,分别为:

  1. onCreate()
  2. onStart()
  3. onResume()
  4. onPause()
  5. onStop()
  6. onRestart()
  7. onDestroy()

下面将对每个状态进行解释。

1. onCreate()

Activity第一次创建时调用,主要完成Activity的初始化。通常在该方法中完成布局文件的加载、变量的初始化等操作。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    // 初始化变量
    mCount = 0;
    // ...
}

2. onStart()

Activity即将开始可见时调用。在该方法中通常完成对数据的加载、注册监听器等操作。

@Override
protected void onStart() {
    super.onStart();
    // 加载数据
    loadData();
    // 注册监听器
    registerListeners();
    // ...
}

3. onResume()

Activity处于前台,可见时调用。在该方法中通常完成一些需要启动的操作,例如定位、相机等。

@Override
protected void onResume() {
    super.onResume();
    // 启动定位
    startLocation();
    // 启动相机
    startCamera();
    // ...
}

4. onPause()

Activity失去焦点、不再前台,但仍可见时调用。在该方法中通常完成一些需要暂停的操作。

@Override
protected void onPause() {
    super.onPause();
    // 暂停定位
    pauseLocation();
    // 暂停相机
    pauseCamera();
    // ...
}

5. onStop()

Activity不再可见时调用。在该方法中通常完成一些数据存储、注销监听器等操作。

@Override
protected void onStop() {
    super.onStop();
    // 存储数据
    saveData();
    // 注销监听器
    unregisterListeners();
    // ...
}

6. onRestart()

Activity重新启动时调用。在该方法中通常完成一些重新开始计时、更新数据等操作。

@Override
protected void onRestart() {
    super.onRestart();
    // 重新计时
    mCount = 0;
    // 更新数据
    updateData();
    // ...
}

7. onDestroy()

Activity被销毁时调用,在该方法中进行一些资源的释放、对象的销毁等操作。

@Override
protected void onDestroy() {
    super.onDestroy();
    // 释放资源
    releaseResource();
    // 销毁对象
    destroyObject();
    // ...
}

Activity的生命周期示例

下面通过两个示例来演示Activity的生命周期。

示例一

在Activity1中从按钮1中启动Activity2,然后按返回键返回到Activity1:

public class MainActivity extends AppCompatActivity {

    Button mButton;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mButton = findViewById(R.id.button);
        mButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                // 启动Activity2
                Intent intent = new Intent(MainActivity.this, Activity2.class);
                startActivity(intent);
            }
        });
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.d("MainActivity", "onStart() called");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.d("MainActivity", "onResume() called");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.d("MainActivity", "onPause() called");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.d("MainActivity", "onStop() called");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d("MainActivity", "onDestroy() called");
    }
}

public class Activity2 extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_2);
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.d("Activity2", "onStart() called");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.d("Activity2", "onResume() called");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.d("Activity2", "onPause() called");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.d("Activity2", "onStop() called");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d("Activity2", "onDestroy() called");
    }
}

运行结果:

D/MainActivity: onStart() called
D/MainActivity: onResume() called
D/Activity2: onStart() called
D/Activity2: onResume() called
D/MainActivity: onPause() called
D/Activity2: onPause() called
D/MainActivity: onStop() called
D/Activity2: onStop() called
D/MainActivity: onDestroy() called

示例二

在Activity中实现一个计数器,当计数器达到10时关闭Activity。

public class MainActivity extends AppCompatActivity {

    TextView mTextView;
    int mCount;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        mTextView = findViewById(R.id.text_view);

        if (savedInstanceState != null) {
            mCount = savedInstanceState.getInt("count");
        }

        mTextView.setText(String.valueOf(mCount));

        Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                mCount++;
                mTextView.setText(String.valueOf(mCount));
                if (mCount >= 10) {
                    finish();
                }
            }
        });
    }

    @Override
    protected void onSaveInstanceState(Bundle outState) {
        super.onSaveInstanceState(outState);
        outState.putInt("count", mCount);
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.d("MainActivity", "onStart() called");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.d("MainActivity", "onResume() called");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.d("MainActivity", "onPause() called");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.d("MainActivity", "onStop() called");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.d("MainActivity", "onDestroy() called");
    }
}

运行结果:

D/MainActivity: onStart() called
D/MainActivity: onResume() called
D/MainActivity: onPause() called
D/MainActivity: onStop() called
D/MainActivity: onDestroy() called

总结

Activity作为组件之一,掌握它的生命周期非常重要。要尽可能合理地利用好每个周期阶段完成相应操作,以达到最高的应用程序性能和用户体验。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android四大组件之Activity深入解读生命周期 - Python技术站

(0)
上一篇 2023年6月27日
下一篇 2023年6月27日

相关文章

  • C++ Primer学习记录之变量

    C++ Primer学习记录之变量攻略 1. 变量的定义和声明 在C++中,变量是用来存储数据的,可以通过定义和声明来创建变量。 1.1 变量的定义 变量的定义包括变量的类型和名称。语法如下: type variable_name; 其中,type是变量的类型,variable_name是变量的名称。 示例: int age; // 定义一个整型变量age …

    other 2023年8月8日
    00
  • vue 自定义组件的写法与用法详解

    让我们来详细讲解“Vue 自定义组件的写法与用法详解”。 什么是自定义组件 在使用 Vue 构建应用时,我们可以将一些功能相对独立的组件封装成自定义组件,例如按钮、输入框、轮播图等,以便在其他组件中复用。自定义组件由模板、样式、功能三部分组成,其中模板描述了组件的结构;样式定义了组件的外观;功能包括与组件交互的属性、方法和事件。在使用自定义组件时,我们只需要…

    other 2023年6月25日
    00
  • 巧解 JavaScript 中的嵌套替换(强大正则)

    巧解 JavaScript 中的嵌套替换(强大正则)攻略 在 JavaScript 中,我们经常需要对字符串进行替换操作。通常情况下,我们可以使用 replace() 方法来实现简单的替换。但是,当涉及到嵌套替换时,即在替换的结果中还存在需要替换的内容,这时候就需要使用强大的正则表达式来解决了。 下面是一个详细的攻略,介绍如何巧妙地在 JavaScript …

    other 2023年7月28日
    00
  • CentOS7.5 安装MySql的教程

    CentOS7.5 安装MySql的教程 环境准备 在安装Mysql之前,我们需要先确保以下条件已经满足: CentOS7.5系统已经安装完成。 系统已经启用网络,并且能够正常访问网络。 系统已经更新到最新版本。 安装Mysql 在终端中输入以下命令,以更新系统包: yum update 接下来,我们需要添加Mysql仓库,在终端中输入以下命令: rpm -…

    other 2023年6月27日
    00
  • nodejs之process进程

    Node.js 之 Process 进程 在 Node.js 中,Process 是一个全局对象,用于管理当前 Node.js 进程。本文将介绍 Node.js 之 Process 进程,包括基本概念、应用场景、实现方法和示例说明。 基本概念 在 Node.js 中,Process 是一个全局对象,用于管理当前 Node.js 进程。Process 对象提供…

    other 2023年5月6日
    00
  • 浅析Android文件存储

    以下是使用标准的Markdown格式文本,详细讲解Android文件存储的完整攻略: 浅析Android文件存储 概述 在Android开发中,文件存储是一项重要的功能。Android提供了多种文件存储方式,包括内部存储、外部存储和共享存储。每种存储方式都有其特点和适用场景。 内部存储 内部存储是应用程序私有的存储空间,只有应用本身可以访问。内部存储适合存储…

    other 2023年10月14日
    00
  • Android自定义日历控件实例详解

    下面是关于“Android自定义日历控件实例详解”的完整攻略。 1. 简介 该攻略主要讲解如何使用自定义控件实现日历功能。本攻略将从以下几个方面进行详细说明:- 编写自定义日历控件的思路和基本实现- 日历控件的样式自定义(如字体颜色、背景颜色等)- 日历控件的基本使用 2. 编写自定义日历控件 2.1 实现思路 日历控件的实现思路是:先确定需要显示的月份,并…

    other 2023年6月26日
    00
  • 雷达无线电系列(一)几种常见的幅度分布函数(matlab)

    下面是关于float的完整攻略,包括介绍、使用和两个示例说明。 介绍 float是一种Python中的数据类型,用于表示浮点数。浮点数是一种带有小数点的数值,可以表示实数。在Python中,可以使用float类型来存储和处理浮点数。 使用 定义float变量: 在Python中,可以使用赋值语句定义float变量,例如: a = 1.23 b = 4.56 …

    other 2023年5月6日
    00
合作推广
合作推广
分享本页
返回顶部