Android Activity生命周期调用的理解

yizhihongxing

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日

相关文章

  • linux vim配置文件(经典实用,值得珍藏)

    Linux vim配置文件 (经典实用,值得珍藏) 简介 vim 是一款经典的文本编辑器,被广泛应用于 Linux 系统中。由于其高效简洁的操作方式和强大的功能,vim 在程序员、系统管理员等技术领域被广泛使用。然而,vim 默认的配置不一定能够满足我们的需求,因此,我们需要对其进行配置,以便更好地发挥其强大的编辑能力。 本文将详细讲解如何进行 vim 的配…

    other 2023年6月25日
    00
  • ArcMap中地图输出(Options)选项显示不完整

    下面是“ArcMap中地图输出(Options)选项显示不完整的完整攻略”,包括问题原因、解决方法和两个示例说明。 问题原因 在ArcMap中,地图输出(Options)选项显示不完整的原因可能是因为显示器分辨率不够高,或者是Windows显示设置中的文本大小设置过大。 解决方法 以下是解决ArcMap中地图输出(Options)选项显示不完整的方法: 1.…

    other 2023年5月5日
    00
  • iso文件的意思以及ISO文件打开方法

    ISO文件是一种光盘映像文件,它包含了光盘的完整内容,包括文件系统、文件和目录结构等。ISO文件通常用于光盘的备份、复制和分发。在打开ISO文件之前,你需要了解ISO文件的打开方法。 以下是打开ISO文件的两种常见方法的示例说明: 方法一:使用虚拟光驱软件 下载并安装虚拟光驱软件,例如Daemon Tools、Virtual CloneDrive等。 双击运…

    other 2023年8月6日
    00
  • vue px转rem配置详解

    Vue px转rem配置详解 什么是px和rem px:是像素,是网页最常用的长度单位。 rem:是一种相对单位,它是根据根元素的字体大小而定的单位,也就是说当根元素的字体大小发生变化时,原本以rem作为单位的元素也会随之改变。 为什么需要将px转为rem 移动端屏幕尺寸多种多样,我们使用不同的屏幕访问页面就会发现页面布局等效果有差异。 根据设备宽度动态改变…

    other 2023年6月27日
    00
  • WinXP桌面右键刷新会弹出网页广告怎么解决?

    如果WinXP桌面右键刷新会弹出网页广告,可以按以下步骤来解决: 检查并清除潜在的恶意软件。恶意软件可以导致广告弹出。使用可信赖的杀毒软件和反恶意软件工具来扫描和清除系统中的恶意软件。示例命令: # Windows Defender 病毒和威胁防护扫描 Microsoft Defender Antivirus -Scan -ScanType 3 重置注册表项…

    other 2023年6月27日
    00
  • java各种类型对象占用内存情况分析

    Java各种类型对象占用内存情况分析攻略 在Java中,不同类型的对象在内存中占用的空间大小是不同的。了解这些对象的内存占用情况对于优化内存使用和性能调优非常重要。本攻略将详细讲解Java中各种类型对象的内存占用情况,并提供两个示例说明。 1. 基本数据类型 Java的基本数据类型在内存中占用的空间大小是固定的,不受对象的影响。以下是常见的基本数据类型及其占…

    other 2023年8月2日
    00
  • oracle如何批量更新数据

    当然,我可以为您提供有关“Oracle如何批量更新数据”的完整攻略,以下是详细说明: 什么是Oracle批量更新数据? Oracle批量更新数据是指一次性更新多条记录,而不是逐条更新。这种方法可以提高更新数据的效率,减少数据库的负载。 Oracle批量更新数据的步骤 以下是Oracle批量更新数据的步骤: 创建一个临时表,用于存储更新的数据。 将要更新的数据…

    other 2023年5月7日
    00
  • 提升WordPress 打开速度全面解决方案

    下面是提升WordPress打开速度的全面解决方案详细攻略: 第一步:优化网站图片 在网站中使用较大的图片会导致网站加载速度变慢。因此,在优化网站速度方面,优化图片是至关重要的一步。以下是优化图片的方法: 压缩图片:使用工具如TinyPNG,Kraken.io或Compressor.io等来压缩图片。 减少图片数量:只使用必要的图片,并减少重复的图片。 使用…

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