Android四大组件之Activity深入解读生命周期

 更新时间:2022年07月20日 14:31:31   作者:半身风雪  
虽然说我们天天都在使用Activity,但是你真的对Activity的生命机制完全了解了吗?Activity的生命周期方法只有七个,但是其实那只是默认的情况。也就是说在其他情况下,Activity的生命周期可能不会是按照我们以前所知道的流程,这就要说到Activity的启动模式

简介:在Android组件中最基本也是最为常见的四大组件:

  • Activity
  • Service服务
  • Content Provider内容提供者
  • BroadcastReceiver广播接收器

一、什么是Activity

Activity是一个应用程序组件,提供一个屏幕,用户可以用来交互为了完成某项任务。

Activity中所有操作都与用户密切相关,是一个负责与用户交互的组件,可以通过setContentView(View)来显示指定控件。

在一个android应用中,一个Activity通常就是一个单独的屏幕,它上面可以显示一些控件也可以监听并处理用户的事件做出响应。Activity之间通过Intent进行通信。

二、Activity之间的跳转

我们新建一个项目,创建两个Activity ,并在AndroidManifest.xml 中注册:

注意红框中的代码,这里代表着程序运行启动的第一个界面。

在Activity1 中的XML配置文章中添加一个按钮:

<Button
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="activity跳转"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintLeft_toLeftOf="parent"
    app:layout_constraintRight_toRightOf="parent"
    app:layout_constraintTop_toTopOf="parent"
    android:onClick="onClick"
    tools:ignore="HardcodedText,OnClick,UsingOnClickInXml" />

在Activity1.java 文件中添加按钮的onClick 点击事件:

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

运行项目,点击activity跳转按钮,完成跳转功能

三、Activity 生命周期

3.1、Activity生命周期的基本状态

在android 中,Activity 生命周期可以分为四类:

Active/Running

一个新 Activity 启动入栈后,它显示在屏幕最前端,处理是处于栈的最顶端(Activity栈顶),此时它处于可见并可和用户交互的激活状态,叫做活动状态或者运行状态(active or running)。

Paused

当 Activity失去焦点, 被一个新的非全屏的Activity 或者一个透明的Activity 被放置在栈顶,此时的状态叫做暂停状态(Paused)。此时它依然与窗口管理器保持连接,Activity依然保持活力(保持所有的状态,成员信息,和窗口管理器保持连接),但是在系统内存极端低下的时候将被强行终止掉。所以它仍然可见,但已经失去了焦点故不可与用户进行交互。

Stopped

如果一个Activity被另外的Activity完全覆盖掉,叫做停止状态(Stopped)。它依然保持所有状态和成员信息,但是它不再可见,所以它的窗口被隐藏,当系统内存需要被用在其他地方的时候,Stopped的Activity将被强行终止掉。

Killed

如果一个Activity是Paused或者Stopped状态,系统可以将该Activity从内存中删除,Android系统采用两种方式进行删除,要么要求该Activity结束,要么直接终止它的进程。当该Activity再次显示给用户时,它必须重新开始和重置前面的状态。

3.2、Activity 生命周期的7个方法

参考官方给出的生命周期图可以知道activity的生命周期分为7个方法:

可运行下列代码进行验证:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
}
@Override
protected void onStart() {
    super.onStart();
    System.out.println("MainActivity.onStart");
}
@Override
protected void onResume() {
    super.onResume();
    System.out.println("MainActivity.onResume");
}
@Override
protected void onPause() {
    super.onPause();
    System.out.println("MainActivity.onPause");
}
@Override
protected void onStop() {
    super.onStop();
    System.out.println("MainActivity.onStop");
}
@Override
protected void onDestroy() {
    super.onDestroy();
    System.out.println("MainActivity.onDestroy");
}
@Override
protected void onRestart() {
    super.onRestart();
    System.out.println("MainActivity.onRestart");
}

3.3、Activity 生命周期的三个循环

Activity有三个关键的循环:

  • 整个的生命周期,从onCreate(Bundle)开始到onDestroy()结束。Activity在onCreate()设置所有的全局状态,在onDestory()释放所有的资源。例如:某个Activity有一个在后台运行的线程,用于从网络下载数据,则该Activity可以在onCreate()中创建线程,在onDestory()中停止线程。
  • 可见的生命周期,从onStart()开始到onStop()结束。在这段时间,可以看到Activity在屏幕上,尽管有可能不在前台,不能和用户交互。在这两个接口之间,需要保持显示给用户的UI数据和资源等,例如:可以在onStart中注册一个IntentReceiver来监听数据变化导致UI的变动,当不再需要显示时候,可以在onStop()中注销它。onStart()onStop()都可以被多次调用,因为Activity随时可以在可见和隐藏之间转换。
  • 前台的生命周期,从onResume()开始到onPause()结束。在这段时间里,该Activity处于所有 Activity的最前面,和用户进行交互。Activity可以经常性地在resumed和paused状态之间切换,例如:当设备准备休眠时,当一个 Activity处理结果被分发时,当一个新的Intent被分发时。所以在这些接口方法中的代码应该属于非常轻量级的。

到此这篇关于Android四大组件之Activity深入解读生命周期的文章就介绍到这了,更多相关Android Activity内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Android开发中MJRefresh自定义刷新动画效果

    Android开发中MJRefresh自定义刷新动画效果

    本文给大家介绍了MJRefresh自定义刷新动画效果,包括常见用法等相关知识,非常不错,具有参考借鉴价值,感兴趣的朋友一起看看吧
    2016-11-11
  • Android 驱动编写LED-NDK程序

    Android 驱动编写LED-NDK程序

    这篇文章主要介绍了Android 驱动编写LED-NDK程序的相关资料,需要的朋友可以参考下
    2016-09-09
  • Android ImageLoader第三方框架解析

    Android ImageLoader第三方框架解析

    这篇文章主要为大家详细解析了Android ImageLoader第三方框架,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-11-11
  • 深度剖析Android Binder IPC机制

    深度剖析Android Binder IPC机制

    Android系统的成功离不开其强大的IPC(Inter-Process Communication)机制,其中最引人注目的就是Binder,本文将深入探讨Binder的技术原理,解释其工作方式以及相关的关键概念
    2023-10-10
  • 解析android中隐藏与显示软键盘及不自动弹出键盘的实现方法

    解析android中隐藏与显示软键盘及不自动弹出键盘的实现方法

    本篇文章对android中隐藏与显示软键盘以及不自动弹出键盘的方法进行了分析介绍。需要的朋友参考下
    2013-05-05
  • 详解Android的Handler机制原理

    详解Android的Handler机制原理

    Android的Handler机制是一种用于处理和调度线程之间消息传递的机制,通常用于在后台线程中执行任务,并将结果返回到主线程中更新UI,Handler机制的核心是Message和MessageQueue,以及Looper,本文给大家详细讲解了Android的Handler机制原理,需要的朋友可以参考下
    2023-10-10
  • android 自定义TabActivity的实例方法

    android 自定义TabActivity的实例方法

    系统自带的TabActivity的效果不甚理想。开发中对TabActivity自定义可能有两种:第一种:改变TAB行的位置,如放到页面下方。第二种:对TabHost图片的自定义
    2013-11-11
  • Android 九宫格的实现方法

    Android 九宫格的实现方法

    今天在浏览网页的时候看到了一篇有关九宫格实现的博文,感觉挺有意思。所以自己模仿做了一个,先贴出代码如下:
    2013-05-05
  • 完全解析Android多线程中线程池ThreadPool的原理和使用

    完全解析Android多线程中线程池ThreadPool的原理和使用

    本篇文章给大家通过原理和实例详细讲述了Android多线程中线程池ThreadPool的原理和使用,对此有兴趣的朋友可以跟着参考学习下。
    2018-04-04
  • Android自定义PopWindow带动画向下弹出效果

    Android自定义PopWindow带动画向下弹出效果

    这篇文章主要为大家详细介绍了Android自定义PopWindow带动画向下弹出效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2018-11-11

最新评论