Android开发中Activity的生命周期及加载模式详解

下面是关于“Android开发中Activity的生命周期及加载模式详解”的完整攻略:

什么是Activity生命周期?

在Android开发中,Activity是一个界面的表示,它包含了用户与之交互的所有内容。而Activity的生命周期,是指从Activity的创建到销毁,整个过程中所经历的六个阶段。这六个阶段分别为:

  1. onCreate()
  2. onStart()
  3. onResume()
  4. onPause()
  5. onStop()
  6. onDestroy()

接下来我们将对这六个阶段分别进行详细讲解。

Activity生命周期详解

onCreate()

Activity继承自Context,因此第一个被调用的是Activity的构造方法。其次你可以通过onCreate()方法来初始化你的Activity,比如可以调用setContentView()方法来指定你的Activity的布局文件。

onStart()

在onCreate()方法完成后,接着调用的是onStart()方法。在这个阶段,Activity需要准备好显示给用户的界面,但是界面并没有出现,它仍然被其他界面所覆盖着。

onResume()

当一个Activity处于Resumed状态时,用户可以看到并与之交互。在onResume()方法中,Activity会向用户展示它的UI,并开始响应用户的操作。因为这个阶段Activity已经可以接收用户的输入,所以也是处理用户交互的最佳地点。

onPause()

当一个Activity处于Paused状态时,它仍然可见,但是它已经失去了焦点。一般在这个阶段,Activity将停止处理用户输出,且它的动画停止了。次生对象的访问将暂停,为了加快后台任务的速度。在这个阶段,如果某些操作需要耗费大量时间,你需要启动一个线程来进行操作。

onStop()

当一个Activity停止时,它会隐藏,并不再对用户进行显示。它的UI不再可见,并且所有次生对象都会被回收。当用户重启这个Activity时,Activity将在onStart()方法中重新创建。

onDestroy()

当一个Activity被销毁时,它会从内存中消失,并且不再占用任何空间。在这个阶段,Activity已经过时,任何重要的信息都需要被保存起来。

Activity加载模式详解

  1. Standard

标准模式是Activity的默认加载模式,每次启动Activity都会创建一个新的实例。

  1. SingleTop

在这个模式中,如果新Activity已经位于栈顶时,不会再重新创建一个新的实例,而是直接调用onNewIntent()方法。如果不在栈顶,则会创建一个新的实例。

示例:

public class SingleTopActivity extends AppCompatActivity {
    private TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_single_top);
        textView = findViewById(R.id.tv_single_top);
        textView.setText("TaskId = " + getTaskId() + "\n" + "Instance = " + toString());
        Log.d("SingleTopActivity", "onCreate: TaskId:" + getTaskId()
                + ", hashCode:" + hashCode());
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        Log.d("SingleTopActivity", "onNewIntent: TaskId:" + getTaskId()
                + ", hashCode:" + hashCode());
    }

    public void onClick(View view) {
        Intent intent = new Intent(this, SingleTopActivity.class);
        startActivity(intent);
    }
}
  1. SingleTask

在这个模式中,如果Activity已经存在于栈中,就不会再创建一个新的实例,而是直接调用onNewIntent()方法。如果将要启动的Activity不存在于栈中,则会创建一个新的Task,将Activity放到栈顶。

示例:

public class SingleTaskActivity extends AppCompatActivity {
    private TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_single_task);
        textView = findViewById(R.id.tv_single_task);
        textView.setText("TaskId = " + getTaskId() + "\n" + "Instance = " + toString());
        Log.d("SingleTaskActivity", "onCreate: TaskId:" + getTaskId()
                + ", hashCode:" + hashCode());
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        Log.d("SingleTaskActivity", "onNewIntent: TaskId:" + getTaskId()
                + ", hashCode:" + hashCode());
    }

    public void onClick(View view) {
        Intent intent = new Intent(this, SingleTaskActivity.class);
        startActivity(intent);
    }
}
  1. SingleInstance

在这个模式中,每次启动一个Activity都会创建一个新的Task,在新的Task中Activity只有一个实例。

示例:

public class SingleInstanceActivity extends AppCompatActivity {
    private TextView textView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_single_instance);
        textView = findViewById(R.id.tv_single_instance);
        textView.setText("TaskId = " + getTaskId() + "\n" + "Instance = " + toString());
        Log.d("SingleInstanceActivity", "onCreate: TaskId:" + getTaskId()
                + ", hashCode:" + hashCode());
    }

    @Override
    protected void onNewIntent(Intent intent) {
        super.onNewIntent(intent);
        Log.d("SingleInstanceActivity", "onNewIntent: TaskId:" + getTaskId()
                + ", hashCode:" + hashCode());
    }

    public void onClick(View view) {
        Intent intent = new Intent(this, SingleInstanceActivity.class);
        startActivity(intent);
    }
}

通过上面的四个示例,我们可以更好的理解Activity的生命周期及加载模式。

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

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

相关文章

  • win10怎么显示文件扩展名?Win10系统显示文件扩展名的方法介绍

    Win10系统显示文件扩展名的方法介绍 在Win10系统中,默认情况下,文件的扩展名是被隐藏的。然而,有时候我们需要显示文件的扩展名,以便更好地识别文件类型。下面是显示文件扩展名的方法介绍: 方法一:通过文件夹选项显示扩展名 打开任意一个文件夹,然后点击窗口顶部的“查看”选项卡。 在“查看”选项卡中,点击工具栏上的“选项”按钮。 弹出的“文件夹选项”对话框中…

    other 2023年8月5日
    00
  • CSS标签居中

    下面是“CSS标签居中的完整攻略”,包括基本原理、实现方法和两个示例说明。 基本原理 在 CSS 中,要使标签居中,需要使用以下两个属性: display: flex; 用于将容器设置为弹性盒子。 justify-content: center; 用于将子元素水平居中。 实现方法 实现标签居中可以按照以下步骤进行操作: 创建一个容器元素。 <div c…

    other 2023年5月5日
    00
  • vue项目配置env的方法步骤

    Vue项目配置.env文件主要是为了在开发和生产阶段,动态地管理不同的环境变量。比如开发人员在开发阶段,需要连接到本地开发的服务器,而在生产环境下则需要连接到生产服务器。 下面是Vue项目配置.env的步骤: 在项目根目录下,创建.env文件和.env.development文件和.env.production文件。 在.env.development和.e…

    other 2023年6月27日
    00
  • sqlserver中含有某字符串

    当然,我很乐意为您提供有关“SQL Server中含有某字符串”的完整攻略。以下是详细的步骤和两个示例: 1 SQL Server中含有某字符串的方法 在SQL Server中,您可以使用LIKE运算符和通配符来查找含某个字符串的值。LIKE运算符用于比较一个字符串与另一个字符串是否相似。通配符用于匹配一个字符串中的任字符。 以下是使用LIKE运算符和通配符…

    other 2023年5月6日
    00
  • win7/win8.1桌面右键”新建文件夹”不见了的快速找回方法

    下面是详细的攻略: 问题描述 在Windows7和Windows8.1系统中,桌面右键菜单中的“新建文件夹”不见了,无法快速创建新文件夹,应该如何解决呢? 解决方法 其实这个问题很容易解决,只要按照以下步骤操作即可: 打开“运行”窗口,可以通过快捷键Win + R打开; 在“运行”窗口中输入“regedit”并回车; 进入注册表编辑器界面后,在左侧导航栏中依…

    other 2023年6月27日
    00
  • .netframework4.7安装

    .NET Framework 4.7 安装 .NET Framework 是一个由微软公司开发的应用程序框架,包含了许多预编译代码,可以供开发人员使用,使得开发 Windows 应用程序更加容易。此外,还可以提高应用程序的性能、可靠性和安全性。 本文将介绍 .NET Framework 4.7 的安装步骤。如果你想使用最新的技术和开发应用程序,则可以使用 .…

    其他 2023年3月28日
    00
  • w3wp.exe占用cpu过高的解决方法

    w3wp.exe占用CPU过高的解决方法 问题描述 在使用IIS部署Web应用程序的过程中,经常会遇到w3wp.exe进程占用CPU过高的问题。当进程占用率过高时,服务器的性能会下降,导致用户访问体验不佳。 解决方法 以下是几个可以尝试的解决方法: 1. 调整应用程序池的性能选项 进入IIS管理器,在左侧窗口中选择“应用程序池”,然后在右侧窗口中选择要修改的…

    other 2023年6月25日
    00
  • AAM(Active Appearance Model)算法介绍

    AAM(Active Appearance Model)算法介绍 什么是AAM算法 AAM(Active Appearance Model)算法是一种基于统计形状模型的人脸识别算法,它可以对人脸进行建模,并通过对模型的训练和优化,实现对人脸的识别和跟踪。 AAM算法的基本思想是将人脸分为形状和纹理两个部分,通过对形状和纹理的建模,实现对人脸的识别和跟踪。形状…

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