Android开发之activity的生命周期详解

Android开发之activity的生命周期详解

在Android开发过程中,Activity是一个非常重要的组件,掌握Activity的生命周期,能够更好的开发高质量的Android应用程序。本文将深入介绍Activity的生命周期,包括常见的生命周期回调方法和示例。

Activity的生命周期

Activity的生命周期是指Activity从被创建到被销毁的整个过程,包括以下几个阶段:

  1. 创建阶段
  2. 可见阶段
  3. 前台阶段
  4. 暂停阶段
  5. 停止阶段
  6. 销毁阶段

每个阶段都有对应的生命周期回调方法,开发者可以在这些方法中执行相应的操作。

创建阶段

onCreate

Activity被创建时,系统会调用onCreate方法,这个阶段主要用来进行初始化工作,比如获取控件、绑定数据、设置布局等。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    // 做一些初始化的工作
}

可见阶段

onStart

当Activity可见时,系统会自动调用onStart方法,这个阶段用来进行一些UI的准备工作,例如初始化变量、注册广播接收器等。

@Override
protected void onStart() {
    super.onStart();
    // 做一些UI准备工作
}

onResume

当Activity进入前台时,系统会自动调用onResume方法,这个阶段主要用来初始化一些资源,例如打开相机、启动服务等。

@Override
protected void onResume() {
    super.onResume();
    // 做一些资源初始化的工作
}

前台阶段

onPause

当Activity进入暂停状态时,系统会自动调用onPause方法,这个阶段用来保存一些必要的状态,例如暂停播放视频、保存当前位置等。

@Override
protected void onPause() {
    super.onPause();
    // 保存一些必要的状态
}

onStop

当Activity进入停止状态时,系统会自动调用onStop方法,这个阶段主要用来释放一些资源,例如清空缓存、关闭服务等。

@Override
protected void onStop() {
    super.onStop();
    // 释放一些资源
}

销毁阶段

onDestroy

当Activity被销毁时,系统会自动调用onDestroy方法,这个方法主要用来释放活动所占用的资源,例如关闭数据库、释放内存等。

@Override
protected void onDestroy() {
    super.onDestroy();
    // 释放所占用的资源
}

示例说明

示例1

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.d("MainActivity", "onCreate executed");
    }

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

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

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

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

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

此示例演示了Activity生命周期各个阶段的生命周期回调方法,通过Log输出信息,可以清楚地看到Activity生命周期每个阶段的触发条件和触发顺序。例如,执行以下操作:

  1. 打开应用程序
  2. 点击Home键,返回桌面
  3. 再次打开应用程序
  4. 点击Back键,退出应用程序

输出结果如下:

onCreate executed
onStart executed
onResume executed
onPause executed
onStop executed
onDestroy executed
onCreate executed
onStart executed
onResume executed
onPause executed
onStop executed
onDestroy executed
onCreate executed
onStart executed
onResume executed
onPause executed
onStop executed
onDestroy executed

示例2

public class SecondActivity extends AppCompatActivity {

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

        Button button = findViewById(R.id.button);
        button.setOnClickListener(view -> {
            Intent intent = new Intent(SecondActivity.this, MainActivity.class);
            startActivity(intent);
            finish();
        });

        Log.d("SecondActivity", "onCreate executed");
    }

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

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

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

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

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

此示例演示了如何从一个Activity跳转到另一个Activity,并在后者销毁时返回前者。例如,执行以下操作:

  1. 打开应用程序
  2. 点击按钮,跳转到SecondActivity
  3. 点击Back键,返回MainActivity

输出结果如下:

onCreate executed
onStart executed
onResume executed
onPause executed
onCreate executed
onStart executed
onResume executed
onPause executed
onStop executed
onDestroy executed
onResume executed
onStop executed
onDestroy executed

总结

掌握Activity的生命周期对于开发高质量的Android应用程序非常重要。通过丰富的实践,开发者可以更好地理解Activity的生命周期,增加代码的可读性和可维护性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android开发之activity的生命周期详解 - Python技术站

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

相关文章

  • SQL Server 2016 CTP2.2安装配置方法图文教程

    SQL Server 2016 CTP2.2安装配置方法图文教程 本教程将详细介绍SQL Server 2016 CTP2.2的安装和配置过程。请按照以下步骤进行操作: 步骤1:下载SQL Server 2016 CTP2.2安装文件 首先,访问Microsoft官方网站,下载SQL Server 2016 CTP2.2的安装文件。确保选择与您的操作系统兼容…

    other 2023年8月3日
    00
  • Qt中控件的函数使用教程分享

    Qt中控件的函数使用教程分享 本文主要介绍在Qt中常用控件的使用方法及相关函数,希望能够对初学者有所帮助。 QLabel控件 QLabel控件用于显示文本或图像,其常用函数及用法如下: 1. setText(const QString& text) 设置标签显示的文本内容,例如: QLabel* label = new QLabel(this); l…

    other 2023年6月26日
    00
  • 解决lombok 父类和子类builder不兼容的问题

    当使用Lombok框架时,有时会遇到使用父类的Builder创建子类实例时出现兼容性问题的情况。这是因为父类和子类在使用Lombok注解生成的Builder时,使用的是不同的构造器和setter方法。 要解决这个问题,我们可以使用下面的步骤来解决: 1. 使用 @SuperBuilder 注解 在父类和子类中都添加 @SuperBuilder 注解,这个注解…

    other 2023年6月26日
    00
  • leptonica在vs2010中的编译及简单使用举例

    以下是leptonica在vs2010中的编译及简单使用举例的完整攻略,包括环境配置、编译方法、注意事项和示例说明等内容。 1. 环境配置 在使用leptonica之前,我们需要配置好相关的开发环境。以下是环境配置的步骤: 安装Visual Studio 2010。我们可以从官网(https://visualstudio.microsoft.coms/old…

    other 2023年5月10日
    00
  • ubuntu设置固定ip最简单的方法!

    在Ubuntu系统中,设置固定IP地址可以确保网络连接的稳定性和可靠性。下面是Ubuntu设置固定IP地址的最简单方法: 打开终端并输入以下命令以编辑网络配置文件: sudo nano /etc/netplan/00-installer-config.yaml 在打开的文件中,找到“network”部分,并添加以下内容: network: version: …

    other 2023年5月8日
    00
  • 在windows下手动初始化PostgreSQL数据库教程

    以下是在Windows下手动初始化PostgreSQL数据库的完整攻略: 1. 安装PostgreSQL 首先,你需要下载并安装PostgreSQL。你可以从 官网 下载对应版本的安装包并进行安装。 2. 打开命令行界面 按下Windows+R快捷键,输入”cmd”以打开命令行界面。 3. 设置环境变量 在命令行界面中输入以下命令,将PostgreSQL的b…

    other 2023年6月20日
    00
  • druidsql解析器概览

    Druid SQL解析器概览攻略 Druid SQL解析器是一个用于解析SQL语句的工具,它可以将SQL语句解析成语树,并提供了一些API来访问语法树中的元素。Druid SQL解析器支持大多数SQL语句,包括SELECT、INSERT、UPDATE和DELETE等。 示例1:使用Druid SQL解析器解析SELECT语句 以下是一个使用Druid SQL…

    other 2023年5月8日
    00
  • CSS 去除浏览器默认 轮廓外框

    CSS去除浏览器默认轮廓外框的完整攻略 在浏览器中,当元素被聚焦时,会出现默认的轮廓外框,这在一些情况下可能会影响页面的美观性。本文将为您提供一份完整攻略,介绍CSS去除浏览器默认轮廓外框的方法,并提供两个示例说明。 方法一:使用outline属性 outline属性可以用于设置元素的轮廓线条,包括颜色、宽度和样式等。可以将outline属性设置为none,…

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