Android Activity的生命周期与加载模式超详细图文解析

目录
  • Activity的生命周期
  • Activity的加载模式

Activity的生命周期

Activity是安卓应用的重要组成单元之一,其对于安卓的作用类似于Servlet对于Web应用的作用。

整个Activity生命周期的图解如下

具体的生命周期可以总结成如下几个步骤

onCreate():Activity启动后第一个被调用的函数,常用来进行Activity的初始化,如创建View,绑定数据和恢复数据。

onStart():当Activity显示在屏幕上时,函数被调用。

onRestart():Activity从停止状态进入活动状态是调用。

onResume():Activity可以接受用户输入时,该函数被调用,此时的activity位于activity栈的栈顶。

onPause():当Activity进入暂停状态时,该函数被调用,一般用来保存持久的数据或释放占用的资源。

onStop():当Activity变为不可见后,该函数被调用,Activity进入停止状态。

onDestroy():在Activity被终止前,被调用。

归纳起来,Activity大概会经历四种状态

运行状态:当前Activity位于前台,用户可见,可以获得焦点

暂停状态:其他Activity位于前台,该Activity依然可见,只是不能获得焦点

停止状态:该Activity不可见,失去焦点

销毁状态:该Activity结束,或Activity所在的进程被结束

我们使用给一个程序来看一下看一下Activity的生命周期。程序非常简单,就是定义两个Activity,分别命名为FirstActivity和SecondActivity,先从FirstActivity跳转到SecondActivity,然后再在SecondActivity销毁该Activity,最后销毁FirstActivity

public class FirstActivity extends Activity {
    final String TAG = "-----FirstActivity-----";
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.first);
        // 输出日志
        Log.d(TAG, "-----onCreate-----");
        TextView textView = findViewById(R.id.text1);
        Button button1 = findViewById(R.id.bn_first1);
        Button button2 = findViewById(R.id.bn_first2);
        // 第一个按钮跳转到第二个Activity
        button1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
                startActivity(intent);
            }
        });
        // 第二个按钮销毁该Activity
        button2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                FirstActivity.this.finish();
            }
        });
    }
    @Override
    protected void onStart() {
        super.onStart();
        Log.d(TAG, "-----onStart-----");
    }
    @Override
    protected void onRestart() {
        super.onRestart();
        Log.d(TAG, "-----onRestart-----");
    }
    @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-----");
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.v(TAG, "-----onDestory-----");
    }
}
public class SecondActivity extends Activity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.second);
        Button button = findViewById(R.id.bn_second);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                SecondActivity.this.finish();
            }
        });
    }
}

最后得到的日志信息如下所示,我们过滤了其他日志,只保留FirstActivity的日志

Activity的加载模式

Activity一共有四种加载模式

  • standard:标准模式,这是默认的加载模式
  • singleTop:Task栈顶单例模式
  • singleTask:Task内单例模式
  • singleInstance:全局单例模式

安卓采用Task来管理多个Activity,当我们启动应用的时候,安卓就会位置创建一个Task,然后启动这个引用的入口Activity,(即<intent-filter>中配置为MAIN和LAUNCHER的Activity)。

我们可以将Task简单理解成存放Activity的栈,先加载的Activity位于栈底,后加载的Activity位于栈顶。

Activity的加载模式就是按照什么样的方式去实例化,加载Activity,并且控制Activity和Task之间的关系。

standard模式

当我们通过standard模式启动Activity的时候,每次都会创建一个新的Activity示例放置到栈顶。当我们在配置Activity时没有指定加载模式的时候,采用的就是standard模式。

singleTop模式

这种模式与standard模式基本相同,唯一不同的就是,当要启动的Activity已经位于栈顶的时候不会创建一个新的实例,而是复用已有的实例。如果我们的目标Activity不位于栈顶,那么还是会创建一个新的实例,这一点和standard模式是一样的。

singleTask模式

采用singleTask模式的Activity在同一个Task中只有一个实例,当系统采用singleTask模式启动目标Activity的时候,可分为如下三种情况

如果要启动的Activity实例不存在,系统会创建一个实例,并且将其置于栈顶

如果要启动的Activity实例位于栈顶,此时的操作与singleTop模式相同

如果要启动的Activity实例存在于栈中,但是没有位于栈顶,那么系统就会将该Activity上的所有Activity移出Task栈,从而使目标Activity转入栈顶

singleInstance模式

在这种加载模式下,系统保证无论从哪个Task中启动目标Activity,只会创建一个目标Activity实例,并会使用一个全新的Task栈来加载该Activity实例。

当系统采用singleInstance模式启动目标Activity时,可分为如下两种情况

如果要启动的目标Activity不存在,系统会创建一个全新的Task,再创建目标Activity的实例,并将它加入到新的Task栈顶

如果要启动的目标Activity已经存在,无论它位于哪个应用程序中,位于哪个Task中,系统都会把该Activity所在的Task转到前台,从而使该Activity显示出来

到此这篇关于Android Activity的生命周期与加载模式超详细图文解析的文章就介绍到这了,更多相关Android Activity的生命周期内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

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

    本文给大家介绍Activity的生命周期,如果大家学习过iOS的小伙伴的话,Activity的生命周期和iOS中ViewController的生命周期非常类似.生命周期,并不难理解.一个人的生命周期莫过于生老病死,花儿的生命周期就是花开花谢了.在Android中Activity的生命周期莫过于Activity的创建到消亡的过程了.本篇博客就会介绍Activity生命周期中的不同阶段,通过实例的形式来窥探一下Activity的生命周期.搞明白Activity的生命周期是至关重要的,因为只有搞明白每

  • Android编程之四种Activity加载模式分析

    本文分析讲述了Android编程之四种Activity加载模式.分享给大家供大家参考,具体如下: Activity状态 一般认为Activity有以下四种状态: ① 活动的:当一个Activity在栈顶,它是可视的.有焦点.可接受用户输入的.Android试图尽最大可能保持它活动状态,杀死其它Activity来确保当前活动Activity有足够的资源可使用.当另外一个Activity被激活,这个将会被暂停. ② 暂停:在很多情况下,你的Activity可视但是它没有焦点,换句话说它被暂停了.有可

  • Android开发Activity的生命周期详解

    目录 前言 典型情况下的生命周期分析 前言 Android生命周期分为两部分: (1)典型情况下的生命周期. (2)异常情况下的生命周期. 典型情况下的生命周期分析 图1 Activity的生命周期图解 图2 Activity生命周期的金字塔图 (1)典型情况下的生命周期指在有用户参与的情况下,Activity所经过的生命周期的改变,正常情况下,Activity的常用生命周期有以下几种情况: onCreate():Activity启动后第一个被调用的函数,常用来进行Activity的初始化,如创

  • Android Activity生命周期调用的理解

    目录 状态 启动模式 操作APP时生命周期调用 Activity异常生命周期 总结 状态 活动存放在一个叫返回栈的一个集合,当重新打开一个Activity时,它就会出现在栈顶.当要销毁该活动时,调用finish()或back,栈顶的活动就会出栈. 运行状态:一个活动处于栈顶时 暂停状态:不处于栈顶,但仍然可见.(失去焦点,非全屏或透明的activity放置在栈顶) 停止状态:不处于栈顶,也不可见,但还是会为它保留一些变量的相关数据.(被覆盖) 销毁状态:在栈中移除(killed状态) 启动模式

  • Android12四大组件之Activity生命周期变化详解

    目录 前言 点击返回键Activity不在onDestroy 重新onBackPressed时的注意点 总结 前言 Android12 有很多令人惊喜的变化,比如基于 Material You 的全新 UI,基于 SplashScreen 的应用启动画面以及更安全的隐私设置等等,此外也有一些需要开发者注意的行为变化,比如这里介绍的 Activity 的 Lifecycle 上的变化 点击返回键Activity不在onDestroy Android 12 以前,当我们处于 Root Activit

  • Android Activity的生命周期与启动模式全面解读

    目录 Activity概述 Activity生命周期 生命周期的调用顺序 演示 Activity的启动模式 启动模式的设置 standard(默认standard) singleTop singleTask singleInstance Activity概述 • Activity(活动)是Android应用程序中最基本的组成单位. • Activity主要负责创建显示窗口,一个Activity对象通常就代表了一个单独的屏幕. • Activity是用户唯一可以看得到的组件,用来与用户进行交互的.

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

    目录 一.什么是Activity 二.Activity之间的跳转 三.Activity 生命周期 3.1.Activity生命周期的基本状态 3.2.Activity 生命周期的7个方法 3.3.Activity 生命周期的三个循环 简介:在Android组件中最基本也是最为常见的四大组件: Activity Service服务 Content Provider内容提供者 BroadcastReceiver广播接收器 一.什么是Activity Activity是一个应用程序组件,提供一个屏幕,

  • Android Activity的生命周期与加载模式超详细图文解析

    目录 Activity的生命周期 Activity的加载模式 Activity的生命周期 Activity是安卓应用的重要组成单元之一,其对于安卓的作用类似于Servlet对于Web应用的作用. 整个Activity生命周期的图解如下 具体的生命周期可以总结成如下几个步骤 onCreate():Activity启动后第一个被调用的函数,常用来进行Activity的初始化,如创建View,绑定数据和恢复数据. onStart():当Activity显示在屏幕上时,函数被调用. onRestart(

  • Android Activity的生命周期详细介绍

    Android Activity的生命周期详细介绍 生命周期描述的是一个类从创建(new出来)到死亡(垃圾回收)的过程中会执行的方法.在这个过程中,会针对不同的生命阶段调用不同的的方法. Activity是Android中四大组件之一,是最常见的应用组件,也是用的最多的组件,它能够提供一个界面与用户进行交互.Activity从创建到销毁有多种状态,从一种状态到另一种状态时会激发相应的回调方法,这些回调方法包括:onCreate  onDestory  onStart  onStop  onRes

  • Android开发之activity的生命周期详解

    本文实例讲述了Android activity的生命周期.分享给大家供大家参考,具体如下: activity类处于android.app包中,继承体系如下: 1.Java.lang.Object 2.android.content.Context 3.android.app.ApplicationContext 4.android.app.Activity activity是单独的,用于处理用户操作.几乎所有的activity都要和用户打交道,所以activity类创建了一个窗口,开发人员可以通

  • Android Flutter绘制有趣的 loading加载动画

    目录 前言 效果1:圆环内滚动的球 效果2:双轨运动 效果3:钟摆运动 总结 前言 在网络速度较慢的场景,一个有趣的加载会提高用户的耐心和对 App 的好感,有些 loading 动效甚至会让用户有想弄清楚整个动效过程到底是怎么样的冲动.然而,大部分的 App的 loading 就是下面这种千篇一律的效果 —— 俗称“转圈”. 本篇我们利用Flutter 的 PathMetric来玩几个有趣的 loading 效果. 效果1:圆环内滚动的球 如上图所示,一个红色的小球在蓝色的圆环内滚动,而且在往

  • Android中Activity的生命周期探讨

    1.完整生命周期 上图是Android Activity的生命周期图,其中Resumed.Paused.Stopped状态是静态的,这三个状态下的Activity存在时间较长. (1)Resumed:在此状态时,用户可以与Activity进行交互,Activity在最前端 (2)Paused:在此状态时,Activity被另外一个Activity遮盖,此Activity不可接受用户输入信息.另外一个Activity来到最前面,半透明的,但并不会覆盖整个屏幕. (3)Stopped:在此状态时,A

  • Android入门教程之组件Activity的生命周期详解

    目录 返回栈 Activity 状态 1. 运行状态 2. 暂停状态 3. 停止状态 4. 销毁状态 Activity 的生存期 onCreate() onStart() onResume() onPause() onStop() onDestroy() onRestart() 完整生存期 可见生存期 前台生存期 Activity 回收处理 返回栈 Android 中的 Activity 是可以层叠的,我们每启动一个新的 Activity,就会覆盖在原有的 Activity 之上,然后点击 Ba

  • 深入解读Android开发中Activity的生命周期

    什么是Activity        首先,Activity是Android系统中的四大组件之一,可以用于显示View.Activity是一个与用记交互的系统模块,几乎所有的Activity都是和用户进行交互的,但是如果这样就能说Activity主要是用来显示View就不太正确了. 在深入了解Activity之前,我们先要知道一下MVC设计模式,在JAVAEE 中MVC设计模式已经很经典了,而且分的也比较清晰了,但是在Android中,好多人对MVC在Android开发中的应用不是很清楚,下面我

  • android横竖屏切换时候Activity的生命周期

    1.新建一个Activity,并把各个生命周期打印出来 2.运行Activity,得到如下信息 onCreate--> onStart--> onResume--> 3.按crtl+f12切换成横屏时 onSaveInstanceState--> onPause--> onStop--> onDestroy--> onCreate--> onStart--> onRestoreInstanceState--> onResume--> 4.再

随机推荐