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

阅读剩余 85%

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

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

相关文章

  • 服务器安全策略 IP安全策略设置方法

    服务器安全策略 IP安全策略设置方法攻略 服务器安全策略是确保服务器系统安全的重要措施之一。其中,IP安全策略是一种常见的设置方法,用于限制服务器对特定IP地址或IP地址范围的访问。下面是详细的攻略,包括设置IP安全策略的步骤和两个示例说明。 步骤一:了解服务器安全策略 在开始设置IP安全策略之前,首先需要了解服务器安全策略的基本概念和原理。服务器安全策略是…

    other 2023年7月31日
    00
  • jQuery lazyload 的重复加载错误以及修复方法

    下面是 “jQuery lazyload的重复加载错误以及修复方法” 的完整攻略。 什么是 jQuery lazyload jQuery lazyload是一款可延迟加载图片的jQuery插件。它可以帮助网页优化,当用户滚动页面时,不立即加载图片,而是在它们出现在浏览器视口内时才加载。这样可以减少页面加载时间并提高用户体验。 重复加载错误 在实现jQuery…

    other 2023年6月25日
    00
  • jQuery简单实现禁用右键菜单

    当我们需要禁用网页上的右键菜单时,可以使用jQuery来实现这一功能。下面是使用jQuery简单实现禁用右键菜单的完整攻略: 1. 在HTML文件中引入jQuery库文件 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <tit…

    other 2023年6月27日
    00
  • Android实现IM多人员组合的群组头像

    Android实现IM多人员组合的群组头像攻略 在Android应用中实现IM多人员组合的群组头像可以通过以下步骤完成: 步骤一:获取用户头像 首先,需要获取每个用户的头像。可以通过用户的个人资料或者从服务器获取用户的头像图片。每个用户的头像应该是一个Bitmap对象。 示例代码: Bitmap user1Avatar = BitmapFactory.dec…

    other 2023年9月7日
    00
  • iPhone11支持WiFi6是什么意思 WiFi 6是什么东西

    下面是关于“iPhone 11支持WiFi 6是什么意思,WiFi 6是什么东西”的详细讲解攻略。 什么是WiFi 6? WiFi 6是指IEEE 802.11ax无线标准,是WiFi技术的最新一代标准,它的性能比上一代标准IEEE 802.11ac有了显著的改进。其中主要改进有以下几点: 更高的速度:WiFi 6最快的速度可达10Gb/s,是WiFi 5的…

    other 2023年6月27日
    00
  • mbps、kbps、kbps的关系

    Mbps、Kbps、KB/s 是计量数据传输速度的单位,它们之间的关系如下: Mbps(兆比特每秒):表示每秒传输的兆比特数,1 Mbps = 1000 Kbps Kbps(千比特每秒):表示每秒传输的千比特数,1 Kbps = 1000 bps。 KB/s(千字节每秒):表示每秒传输的千字节数,1 KB/s = 8 Kbps。 因此,Mbps 和 K 之间…

    other 2023年5月8日
    00
  • C++中 ‘=default ’及‘ =delete ’的使用

    C++中 “=default” 及 “=delete” 的使用 在 C++11 中,我们可以使用 “=default” 和 “=delete” 来精确地控制类的默认函数成员的生成情况,从而提高代码性能和可读性。下面将对 “=default” 和 “=delete” 的使用进行详细讲解。 “=default” 在 C++11 中,对于类的默认函数成员,可以使用…

    other 2023年6月26日
    00
  • 配置中心apollo的设计原理

    配置中心Apollo的设计原理 Apollo是携程开源的一款分布式配置中心,它提供了统一的配置管理、配置发布、配置等功能。本文将介绍Apollo的设计原理,包括如何实现配置动态更新、何保证配置的高可用性等。 Apollo的核心概念 Apollo的设计原理基于以下几个核心概念: Namespace 是Apollo中的一个概念,它代表了一组相关的配置项。每个Na…

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