Android Activity的生命周期详细介绍

yizhihongxing

那我来为你详细讲解一下“Android Activity的生命周期详细介绍”。

什么是Activity生命周期?

在Android中,每个Activity(活动)都会经历一系列的生命周期,换句话说,就是一个Activity存在的过程。

Activity生命周期包括四个状态,分别是:

  • 运行状态(Running):Activity已经显示给用户,并且可以接收到用户的输入事件。
  • 暂停状态(Paused):Activity失去了焦点,其他Activity在其上面覆盖一层。
  • 停止状态(Stopped):Activity不再可见,但其实例对象还存在于内存中。
  • 销毁状态(Destroyed):Activity被完全销毁并从堆栈中移除。

在这些状态中,每个状态都会触发一些回调方法,这些回调方法分别对应Activity的不同生命周期阶段,我们需要通过这些回调方法来管理和控制Activity的状态。

Activity生命周期回调方法

以下是Activity的生命周期回调方法:

onCreate()

当Activity被创建时,会调用onCreate()方法。在这个方法中,我们可以做一些初始化的操作,比如加载布局、绑定事件等。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    // TODO: 在这里进行初始化操作
}

onStart()

当Activity即将变得可见时,会调用onStart()方法。在这个方法中,我们可以开始加载Activity所需的数据或资源。

@Override
protected void onStart() {
    super.onStart();
    // TODO: 在这里开始加载数据或资源
}

onResume()

当Activity变得可见并且可交互时,会调用onResume()方法。在这个方法中,我们可以注册广播、启动动画等操作。

@Override
protected void onResume() {
    super.onResume();
    // TODO: 在这里进行一些交互操作,比如注册广播、启动动画
}

onPause()

当Activity失去焦点时,会调用onPause()方法。在这个方法中,我们需要暂停当前Activity中的工作,并保存数据(如用户输入的数据)。

@Override
protected void onPause() {
    super.onPause();
    // TODO: 在这里进行一些暂停操作,并保存数据
}

onStop()

当Activity停止并不再可见时,会调用onStop()方法。在这个方法中,我们需要释放Activity所占用的资源,如网络连接或数据库连接。

@Override
protected void onStop() {
    super.onStop();
    // TODO: 在这里释放Activity所占用的资源
}

onDestroy()

当Activity被销毁时,会调用onDestroy()方法。在这个方法中,我们需要释放Activity所占用的资源,并取消未完成的任务。

@Override
protected void onDestroy() {
    super.onDestroy();
    // TODO: 在这里释放Activity所占用的资源,并取消未完成的任务
}

onRestart()

当Activity重新启动时,会调用onRestart()方法。在这个方法中,我们需要对Activity进行重新初始化。

@Override
protected void onRestart() {
    super.onRestart();
    // TODO: 在这里重新初始化Activity
}

Activity生命周期示例说明

示例一

在这个示例中,我们创建一个简单的Android应用程序,其中包含两个Activity:MainActivity和SecondActivity。当用户从MainActivity中启动SecondActivity时,我们需要知道每个Activity的生命周期如何处理。

MainActivity

我们在MainActivity中添加一个按钮,并在点击该按钮时启动SecondActivity。

public class MainActivity extends AppCompatActivity {

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

        Button btn = findViewById(R.id.btn_second_activity);
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this, SecondActivity.class);
                startActivity(intent);
            }
        });
    }

    // ......

}

SecondActivity

在SecondActivity中,我们简单地输出Activity的生命周期方法的日志信息,以便了解它们是如何调用的。

public class SecondActivity extends AppCompatActivity {

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

        Log.d("LifeCycle", "onCreate()");
    }

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

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

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

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

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

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

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

        Log.d("LifeCycle", "onStop()");
    }

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

        Log.d("LifeCycle", "onDestroy()");
    }
}

示例二

在这个示例中,我们模拟了一个电话来电的场景,在接听过来电后,我们需要知道如何处理Activity的生命周期。

CallActivity

CallActivity是在模拟接听后来电过程中使用的Activity,用于提示用户当前处于来电状态。

public class CallActivity extends AppCompatActivity {

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

        Log.d("LifeCycle", "CallActivity onCreate()");
    }

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

        Log.d("LifeCycle", "CallActivity onResume()");
    }

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

        Log.d("LifeCycle", "CallActivity onPause()");
    }

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

        Log.d("LifeCycle", "CallActivity onStop()");
    }

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

        Log.d("LifeCycle", "CallActivity onDestroy()");
    }
}

IncomingCallActivity

当模拟一个电话来电时,我们需要创建IncomingCallActivity来处理来电。当IncomingCallActivity被启动时,首先启动CallActivity,然后停留在IncomingCallActivity中。

public class IncomingCallActivity extends AppCompatActivity {

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

        Log.d("LifeCycle", "IncomingCallActivity onCreate()");

        Intent intent = new Intent(this, CallActivity.class);
        startActivity(intent);
    }

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

        Log.d("LifeCycle", "IncomingCallActivity onResume()");
    }

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

        Log.d("LifeCycle", "IncomingCallActivity onPause()");
    }

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

        Log.d("LifeCycle", "IncomingCallActivity onStop()");
    }

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

        Log.d("LifeCycle", "IncomingCallActivity onDestroy()");
    }
}

总结

通过掌握并理解Android Activity的生命周期,我们可以更好地管理和控制应用程序,提高应用程序的质量和性能。

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

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

相关文章

  • 关于python:为什么不能安装cpickle

    在Python 3.x版本中,cpickle是一个用于序列化和反序列化Python对象的模块。但在某些情况下,我们可能会遇到不能安装cpickle的问题。本文详细介绍为什么会出现这个问题以及如何解决它。 为什么不能安装cpickle 在Python 3.x版本中,cpickle已经被弃用,取而代之是pickle模块。因此,在Python 3.x版本中,我们不…

    other 2023年5月7日
    00
  • java-如何在jwt中正确使用jti声明以防止重放攻击?

    在JWT中,JTI声明是用于唯一标识JWT的声明。正确使用JTI声明可以防止重放攻击,提高JWT的安全性。本文将介绍在Java中正确使用JTI声明的完整攻略,包括基本用法、高级用法和示例说明。 基本用法 在Java中,使用JJWT库创建JWT并添加JTI声明的基本用法如下: import io.jsonwebtoken.Jwts; import io.jso…

    other 2023年5月8日
    00
  • 思科CCNA认证学习笔记(五)IPV4地址、IP地址分类及特殊IP地址

    思科CCNA认证学习笔记(五)IPV4地址、IP地址分类及特殊IP地址 1. IPV4地址 IPV4地址是互联网协议版本4(Internet Protocol Version 4)使用的地址格式。它由32位二进制数表示,通常以点分十进制的形式呈现。IPV4地址的格式如下: XXX.XXX.XXX.XXX 其中,每个XXX代表一个8位二进制数,可以取值范围为0…

    other 2023年7月30日
    00
  • liststream()和foreach()

    以下是关于“liststream()和foreach()”的完整攻略,包括基本知识和两个示例。 基本知识 在Java中,list()和foreach()都是用于遍历集合的方法。其中,liststream()是Java 8中新增的方法,可以将List转换为Stream,而使用Stream API进行操作。而foreach()是Java中常用的遍历集合的方法,可…

    other 2023年5月7日
    00
  • zgc介绍

    ZGC介绍 ZGC是一款由Oracle开发的垃圾回收器,专门用于处理大内存的Java应用程序。它采用了分代垃圾收算,可以在数毫秒内处理数百GB的内存。本文将详细介绍ZGC的特点、优势和使用方法,并提供两个示例说明。 特点 ZGC的主要特点如下: 低延迟:ZGC的垃圾回收时间通常超过10ms,可以不影响应用程序性能的情况下回收大内存。 大内存:ZGC可以处理数…

    other 2023年5月7日
    00
  • 2014七个优秀的免费域名:最好用的免费域名

    2014七个优秀的免费域名:最好用的免费域名攻略 在2014年,有七个优秀的免费域名被广泛认可为最好用的免费域名。本攻略将详细介绍这七个域名,并提供两个示例说明。 1. Freenom Freenom 是一个知名的免费域名注册服务提供商。它提供了一系列免费顶级域名(TLDs),如.tk、.ml、.ga、.cf 和 .gq。这些域名可以免费注册,并且提供了简单…

    other 2023年8月6日
    00
  • python如何对链表操作

    针对”python如何对链表操作”,我会详细讲解 Python 如何实现链表数据结构的操作,包括链表的构建、查找、插入、删除等操作。以下是完整攻略: 链表的概念 链表是一种常见的数据结构,它由若干结点组成,每个结点包含了数据和一个指向下一个结点的指针。链表中的结点是按照线性顺序排列的,并且在内存中不一定连续。 Python 中链表的实现 Python 中对链…

    other 2023年6月27日
    00
  • 聊一聊和nacos2.0.0对接那些事

    聊一聊和nacos2.0.0对接那些事 为了实现服务的注册、发现和配置管理,我们经常需要使用分布式配置中心。而Nacos就是一款非常优秀的分布式配置中心,今天我们来聊一聊和Nacos2.0.0对接的一些事情。 概述 在将服务对接到Nacos上时,我们需要了解以下这些方面: Nacos的核心概念 Nacos的使用方式 与Nacos2.0.0的集成 Nacos的…

    其他 2023年3月28日
    00
合作推广
合作推广
分享本页
返回顶部