Android Activity生命周期调用的理解

Android Activity生命周期调用是我们在开发Android应用时必须要理解的重要概念。下面,我将会详细讲解关于Android Activity生命周期调用的攻略。

什么是Android Activity生命周期

Android Activity生命周期指的是一个应用中Activity从创建到销毁的整个过程。在这个过程中每个状态都有相应的方法或回调函数可以被调用执行。理解它的工作原理非常重要,这可以让你在编写应用程序时获得更好的掌控力。

Android Activity生命周期包括以下状态:

  1. onCreate():当 Activity 第一次被创建时调用。
  2. onStart():当 Activity 由不可见到可见的时候调用。
  3. onResume():当 Activity 准备好与用户交互时调用。
  4. onPause():当 Activity 失去焦点或没有被完全遮盖时调用。
  5. onStop():当 Activity 完全被遮盖且不再可见时调用。
  6. onRestart():当 Activity 从停止状态恢复时调用。
  7. onDestroy():当 Activity 被销毁时调用。

生命周期调用顺序

Android Activity的生命周期调用顺序如下:

onCreate() -> onStart() -> onResume() -> onPause() -> onStop() -> onRestart() -> onStart() -> onResume() -> onPause() -> onStop() -> onDestroy()

生命周期调用的示例说明

下面的两个示例会让你更加了解Android Activity生命周期调用。在这里我将使用Kotlin编程语言来演示。

示例1:在 Activity 的生命周期中记录并显示传值

在这个示例中,我们要记录并显示传值在Activity的生命周期中的状态。在MainActivity.kt文件中,我们将会定义一个类,该类继承了AppCompatActivity类。

class MainActivity : AppCompatActivity() {
    val TAG = "LifecycleValues"

   override fun onCreate(savedInstanceState: Bundle?) {
       super.onCreate(savedInstanceState)
       setContentView(R.layout.activity_main)

       Log.d(TAG, "onCreate")
   }

    override fun onStart() {
        super.onStart()
        Log.d(TAG, "onStart")
    }

    override fun onResume() {
        super.onResume()
        Log.d(TAG, "onResume")
    }

    override fun onPause() {
        super.onPause()
        Log.d(TAG, "onPause")
    }

    override fun onStop() {
        super.onStop()
        Log.d(TAG, "onStop")
    }

    override fun onDestroy() {
        super.onDestroy()
        Log.d(TAG, "onDestroy")
    }
}

在这个示例中,我们仅仅记录了生命周期的状态。接下来我们可以通过以下方式将值传递并在Log中显示:

class MainActivity : AppCompatActivity() {
    val TAG = "LifecycleValues"
    var showText: TextView? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        showText = findViewById(R.id.showText) as TextView?
        showText?.text = "onCreate()"

        Log.d(TAG, "onCreate")
    }

    override fun onStart() {
        super.onStart()
        showText?.text = "onStart()"

        Log.d(TAG, "onStart")
    }

    override fun onResume() {
        super.onResume()
        showText?.text = "onResume()"

        Log.d(TAG, "onResume")
    }

    override fun onPause() {
        super.onPause()
        showText?.text = "onPause()"

        Log.d(TAG, "onPause")
    }

    override fun onStop() {
        super.onStop()
        showText?.text = "onStop()"

        Log.d(TAG, "onStop")
    }

    override fun onDestroy() {
        super.onDestroy()
        showText?.text = "onDestroy()"

        Log.d(TAG, "onDestroy")
    }
}

在示例中,我们通过showText的TextView控件来显示在Activity的生命周期过程中的状态。

示例2:在 Activity 的生命周期中记录并显示图片

在这个示例中,我们将在Activity的生命周期中展示一张图片,并记录每一个过程的状态(例如:在Activity被销毁之前我们可以使用内存释放机制来清空我们使用的内存)。在这里,我们将使用ImageView控件来显示。

在MainActivity.kt中,我们将defineImage()函数定义在onCreate()中:

private fun defineImage() {
  val imageView = findViewById<ImageView>(R.id.imageView)
  imageView.setImageResource(R.drawable.dog)
}

然后我们可以通过以下代码来调用生命周期方法:

public class MainActivity : AppCompatActivity() {
    private final String TAG = "LifecycleImages";

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

        Log.d(TAG, "onCreate");
        defineImage();
    }

    @Override
    protected void onStart() {
        super.onStart();

        Log.d(TAG, "onStart");
    }

    @Override
    protected void onResume() {
        super.onResume();

        Log.d(TAG, "onResume");
    }

    @Override
    protected void onPause() {
        super.onPause();

        Log.d(TAG, "onPause");
    }

    @Override
    protected void onStop() {
        super.onStop();

        Log.d(TAG, "onStop");
        removeImage();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();

        Log.d(TAG, "onDestroy");
        removeImage();
    }

    private void removeImage() {
        ImageView imageView = findViewById(R.id.imageView);
        imageView.setImageBitmap(null);
        imageView.destroyDrawingCache();
    }

    private void defineImage() {
        ImageView imageView = findViewById(R.id.imageView);
        imageView.setImageResource(R.drawable.dog);
    }
}

在生命周期方法中我们还可以使用removeImage()来从内存中清空图片以释放内存。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Android Activity生命周期调用的理解 - Python技术站

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

相关文章

  • 全网非常详细的pytest配置文件

    当我们在使用pytest进行测试时,有时候需要定制一些配置来更好地满足我们的需求。因此,编写一个全网非常详细的pytest配置文件可以帮助我们更好地进行测试。以下是完整攻略: 编写pytest配置文件 在项目根目录下创建一个pytest.ini文件,将以下内容写入其中: [pytest] addopts = -s -v testpaths = ./tests…

    other 2023年6月25日
    00
  • Android控件RadioButton的使用方法

    Android控件RadioButton的使用方法 介绍 RadioButton是Android平台上的一种单选按钮控件,它的作用是让用户单选一个选项。在用户需要从多个选项中选择一个时,我们可以使用RadioButton控件。 RadioButton控件是基于CheckBox控件的,可以理解为是CheckBox控件的单选版本。相较于CheckBox控件,Ra…

    other 2023年6月26日
    00
  • JavaScript中数组的各种操作的总结(必看篇)

    JavaScript中数组的各种操作的总结 在JavaScript中,数组是一种非常常见的数据类型。本文将总结一些常见的数组操作。 定义一个数组 可以使用两种方式来定义一个数组。 第一种方法是使用方括号 []: let arr1 = []; // 声明一个空数组 let arr2 = [1, 2, 3]; // 声明一个3个元素的数组,包含数字1,2,3 l…

    other 2023年6月25日
    00
  • 使用CSS做出一个嵌套导航.

    当使用CSS创建嵌套导航时,可以按照以下步骤进行操作: 创建HTML结构:首先,需要创建一个包含导航的HTML结构。可以使用无序列表(<ul>)和列表项(<li>)来构建导航的层次结构。例如: <ul class=\"nav\"> <li><a href=\"#\"…

    other 2023年7月28日
    00
  • Java中不得不知的Collection接口与Iterator迭代器

    下面我就来讲解一下Java中Collection接口和Iterator迭代器的相关知识点。 什么是Java中的Collection接口 在Java中,Collection接口代表了一组对象,这些对象被称为元素。Collection接口定义了一些常用的操作,例如添加、删除、查找、枚举等。 Collection接口是Java集合框架的核心,主要有List、Set…

    other 2023年6月26日
    00
  • 详解利用Spring加载Properties配置文件

    有关”详解利用Spring加载Properties配置文件”,以下是完整攻略. 1. Spring加载Properties文件的介绍 Spring是一种开发框架,它允许我们使用属性文件为应用程序提供配置信息。Spring Framework定义了几种支持从文件系统、类路径和web应用程序上下文加载属性文件的方式。这使得我们可以更灵活地配置应用程序,而不需要在…

    other 2023年6月25日
    00
  • Java语言中4种内部类的超详细讲解

    Java语言中4种内部类的超详细讲解 在Java语言中,内部类是指定义在其他类内部的类。它们可以访问外部类的成员,并且提供了一种实现封装和组织代码的方式。Java语言中有四种类型的内部类,分别是:成员内部类、静态内部类、局部内部类和匿名内部类。下面将对这四种内部类进行详细讲解,并提供示例说明。 1. 成员内部类(Member Inner Class) 成员内…

    other 2023年8月8日
    00
  • 路由器静态ip设置图文步骤

    当设置路由器的静态IP时,可以按照以下步骤进行操作: 打开浏览器并输入路由器的管理界面地址。通常情况下,这个地址是路由器的默认网关地址。你可以在计算机的网络设置中找到默认网关地址。例如,如果默认网关地址是192.168.1.1,那么在浏览器中输入http://192.168.1.1。 输入正确的用户名和密码登录到路由器的管理界面。如果你没有更改过默认的登录凭…

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