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日

相关文章

  • 前端异常502 bad gateway的原因和解决办法

    前端异常502 bad gateway的原因和解决办法 前言 在访问网站或者调用服务时,有时候会遇到502 bad gateway的错误。该错误通常表示网站或服务无法从上游服务器获取正常的响应,导致请求失败。这种情况下,用户通常会感到非常糟糕,因为他们不能访问所需的内容或者无法完成所需的操作。 原因 502 bad gateway错误通常有几种原因: 上游服…

    other 2023年6月27日
    00
  • React中的路由嵌套和手动实现路由跳转的方式详解

    React中的路由嵌套和手动实现路由跳转的方式详解 React是一个流行的JavaScript库,用于构建用户界面。在React应用程序中,路由是一种管理不同页面之间导航的重要机制。本攻略将详细讲解React中的路由嵌套和手动实现路由跳转的方式。 路由嵌套 路由嵌套是指在React应用程序中,一个页面可以包含其他页面的情况。这种嵌套关系可以通过React R…

    other 2023年7月28日
    00
  • jdk的**技术(jdkproxy)

    JDK动态代理(JDK Proxy)是Java中一种常用的代理模式实现方式,它可以在运行时动态地创建代理类和代理对象,而无需先定义代理类。以下是JDK动态代理的完整攻略: 步骤一:定义接口 首先,需要定义一个接口该接口是代理类和被代理类的公共接口。以下是一个示例接口: public interface UserService { void addUser(S…

    other 2023年5月9日
    00
  • B站(bilibili) 等级升级脚本-云函数版

    B站(bilibili) 等级升级脚本-云函数版 随着B站的用户数量不断增长,越来越多的用户加入了B站等级升级的大军。然而,在B站等级升级过程中,需要花费大量时间观看视频,给用户带来了不必要的负担。为了帮助用户提高升级效率,我们推出了基于云函数的B站等级升级脚本之云函数版。 什么是B站等级升级脚本-云函数版? B站等级升级脚本-云函数版是一种快速升级B站等级…

    其他 2023年3月28日
    00
  • Powershell小技巧之判断是否包涵大小写

    PowerShell小技巧之判断是否包含大小写 在PowerShell中,我们可以使用一些技巧来判断一个字符串是否包含大小写。下面是一个完整的攻略,其中包含两个示例说明。 方法一:使用正则表达式 我们可以使用正则表达式来判断一个字符串是否包含大小写。下面是一个示例代码: $pattern = \"[A-Z]\" $string = \&q…

    other 2023年8月18日
    00
  • ubuntu下安装nginx详细步骤

    以下是Ubuntu下安装Nginx的详细步骤的完整攻略,包括基本介绍、安装步骤、配置文件说明和示例说明等内容。 1. 基本介绍 Nginx是一款高性能的Web服务器和反向代理服务器,可以处理高并发的请求,支持多种协议和负载均衡策略。Nginx的安装和配置相对简单,是Web开发中常用的服务器软件之一。 2. 安装步骤 以下是在Ubuntu系统下安装Nginx的…

    other 2023年5月10日
    00
  • mysql中的四大运算符种类实例汇总(20多项)

    MySQL 中的四大运算符种类,包括比较运算符、逻辑运算符、位运算符和赋值运算符。下面将对每种运算符进行详细讲解,包括其功能、用法和示例。 比较运算符 比较运算符用于比较两个值之间的大小关系,返回的结果是 TRUE 或 FALSE。下面是一些比较运算符的示例: 等于运算符(=):判断两个值是否相等。例如: SELECT * FROM student WHER…

    other 2023年6月27日
    00
  • Android ProgressDialog的实例详解

    Android ProgressDialog的实例详解 ProgressDialog是Android中的一种对话框,用于显示任务的进度。本攻略将详细讲解如何使用ProgressDialog,并提供两个示例说明。 步骤一:创建ProgressDialog对象 首先,我们需要创建一个ProgressDialog对象。可以使用ProgressDialog的构造函数…

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