ActivityRecord中Activity生命周期变化

2024-03-10 05:04

本文主要是介绍ActivityRecord中Activity生命周期变化,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文基于AOSP13分析

ActivityRecord一些关键的属性:

final class ActivityRecord extends WindowToken implements WindowManagerService.AppFreezeListener {// pause 超时时间private static final int PAUSE_TIMEOUT = 500;// stop 超时时间private static final int STOP_TIMEOUT = 11 * 1000;// destroy 超时时间private static final int DESTROY_TIMEOUT = 10 * 1000;// Activity当前生命周期private State mState;    // current state we are in// realStartActivityLocked中用以记录失败次数(Exception),可以忽略boolean launchFailed;   // set if a launched failed, to abort on 2nd tryboolean stopped;        // is activity pause finished?boolean delayedResume;  // not yet resumed because of stopped app switches?boolean finishing;      // activity in pending finish list?boolean hasBeenLaunched;// has this activity ever been launched?int launchCount;        // count of launches since last statelong lastLaunchTime;    // time of last launch of this activity
}

其中Activity生命周期有以下状态:

// framework/base/services/core/java/com.android.server.wm.ActivityRecord    enum State {INITIALIZING, // 初始化中STARTED,      // 已startedRESUMED,      // 已resumedPAUSING,      // pause中PAUSED,       // 已pauseSTOPPING,     // stop中STOPPED,      // 已stopFINISHING,    // finish中   正在结束???DESTROYING,   // destory中DESTROYED,    // 已destroyRESTARTING_PROCESS   //重启process中}

【状态更新时机】

INITIALIZING:

  • 类创建时赋值

STARTED:

  • makeActiveIfNeeded中,若shouldStartActivity判断为true,赋值并发送StartActivityItem给应用侧

RESUMED:

  • relaunchActivityLocked中,shouldBeResumed返回true,发送ResumeActivityItem,赋值
  • Task#minimalResumeActivityLocked中,赋值,其调用点就在ActivityTaskSupervisor#realStartActivityLocked中,andResume且readyToResume条件满足时
  • TaskFragment#resumeTopActivity中,topRunningActivity进行attachedToProcess()成功时,赋值
  • 在下面例外情况的异常里,若lastResumedActivity不为空时,给lastResumedActivity赋值

PAUSING:

  • makeActiveIfNeeded中,若shouldPauseActivity判断为true,赋值并发送PauseActivityItem给应用侧
  • TaskFragment#startPausing中,给mResumedActivity赋值

PAUSED:

  • activityPaused中,taskFragment中存在pausingActivity且不为当前activityRecord,且当前状态为PAUSING,赋值
  • relaunchActivityLocked中,shouldBeResumed返回false,发送PauseActivityItem,赋值
  • ActivityTaskSupervisor#realStartActivityLocked中,andResume且readyToResume条件不满足时,赋值
  • TaskFragment#completePause中,mPausingActivity不为空时给其赋值

STOPPING:

  • completeFinishing中当下一个activity还不可见时,需要添加当前Activity到stopping activities中,并赋值
  • stopIfPossible中,赋值并发送StopActivityItem给客户端,并启动stop timeout检查
  • TaskFragment#completePause中,满足一坨条件时赋值

STOPPED:

  • stopIfPossible中,若出现异常Exception时赋值
  • activityStopped中,当前状态为STOPPING且没有stopped时赋值

FINISHING:

  • destroyIfPossible中赋值
  • addToFinishingAndWaitForIdle中赋值

DESTROYING:

  • destroyImmediately中,如果当前正在finishing并且不能跳过destroy时(已经给应用侧发送DestroyActivityItem),赋值并发送destroy超时延迟检查消息。

DESTROYED:

  • destroyImmediately中,如果不满足上述DESTROYING逻辑时,赋值
  • destroyImmediately中,检查进程不存在并且当前不在finishing,赋值
  • removeFromHistory中,赋值
  • cleanUp中,赋值

RESTARTING_PROCESS:

  • restartProcessIfVisible中,赋值

其他情况:

TaskFragment#resumeTopActivity中,topRunningActivity进行attachedToProcess()成功时,会记录当前的状态,之后将其状态更新为RESUMED,若发送ResumeActivityItem失败则回退状态为记录状态。

这篇关于ActivityRecord中Activity生命周期变化的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/793140

相关文章

关于Maven生命周期相关命令演示

《关于Maven生命周期相关命令演示》Maven的生命周期分为Clean、Default和Site三个主要阶段,每个阶段包含多个关键步骤,如清理、编译、测试、打包等,通过执行相应的Maven命令,可以... 目录1. Maven 生命周期概述1.1 Clean Lifecycle1.2 Default Li

你的华为手机升级了吗? 鸿蒙NEXT多连推5.0.123版本变化颇多

《你的华为手机升级了吗?鸿蒙NEXT多连推5.0.123版本变化颇多》现在的手机系统更新可不仅仅是修修补补那么简单了,华为手机的鸿蒙系统最近可是动作频频,给用户们带来了不少惊喜... 为了让用户的使用体验变得很好,华为手机不仅发布了一系列给力的新机,还在操作系统方面进行了疯狂的发力。尤其是近期,不仅鸿蒙O

如何评价Ubuntu 24.04 LTS? Ubuntu 24.04 LTS新功能亮点和重要变化

《如何评价Ubuntu24.04LTS?Ubuntu24.04LTS新功能亮点和重要变化》Ubuntu24.04LTS即将发布,带来一系列提升用户体验的显著功能,本文深入探讨了该版本的亮... Ubuntu 24.04 LTS,代号 Noble NumBAT,正式发布下载!如果你在使用 Ubuntu 23.

vue如何监听对象或者数组某个属性的变化详解

《vue如何监听对象或者数组某个属性的变化详解》这篇文章主要给大家介绍了关于vue如何监听对象或者数组某个属性的变化,在Vue.js中可以通过watch监听属性变化并动态修改其他属性的值,watch通... 目录前言用watch监听深度监听使用计算属性watch和计算属性的区别在vue 3中使用watchE

SWAP作物生长模型安装教程、数据制备、敏感性分析、气候变化影响、R模型敏感性分析与贝叶斯优化、Fortran源代码分析、气候数据降尺度与变化影响分析

查看原文>>>全流程SWAP农业模型数据制备、敏感性分析及气候变化影响实践技术应用 SWAP模型是由荷兰瓦赫宁根大学开发的先进农作物模型,它综合考虑了土壤-水分-大气以及植被间的相互作用;是一种描述作物生长过程的一种机理性作物生长模型。它不但运用Richard方程,使其能够精确的模拟土壤中水分的运动,而且耦合了WOFOST作物模型使作物的生长描述更为科学。 本文让更多的科研人员和农业工作者

Maven(插件配置和生命周期的绑定)

1.这篇文章很好,介绍的maven插件的。 2.maven的source插件为例,可以把源代码打成包。 Goals Overview就可以查看该插件下面所有的目标。 这里我们要使用的是source:jar-no-fork。 3.查看source插件的example,然后配置到riil-collect.xml中。  <build>   <plugins>    <pl

【Vue】关于Vue3的生命周期

目录 Vue3中新增了一个setup生命周期函数:(1) setup执行的时机是在beforeCreate生命周期函数之前执行,在setup函数中是不能通过this来获取实例的;(2) 为了命名的统一性,将beforeDestroy 改名为 beforeUnmount,destroyed 改名为 unmounted 生命周期函数: setup —— 不能通过this来获

09 生命周期

生命周期 beforeCreatecreatedbeforeMountmountedbeforeUpdateupdatedbeforeDestorydestoryed 辣子鸡:香辣入口,犹如吃了炫迈一样 - - - 根本停不下来 <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta name="viewport"

c++的静态变化!

静态成员   对于非静态成员,一个类的每个对象都自己存有一个副本,每个对象根据自己拥有的非静态的数据成员来区别于其他对象。而静态成员则解决了同一个类的多个对象之间数据和函数的共享问题。   静态数据成员   静态数据成员的作用是:实现同一类的不同对象之间的数据共享。   #include<IOSTREAM>   using namespace std;   class Po

Maven生命周期:深入理解构建过程

目录 1. Maven生命周期简介 2. 默认生命周期的阶段 3. 清理生命周期 4. 站点生命周期 5. Maven生命周期的灵活性 6. 结论         在Java开发中,Maven是一个不可或缺的工具,它通过自动化项目的构建、依赖管理和文档生成等任务,极大地提高了开发效率。Maven的核心之一是其构建生命周期,它定义了项目构建过程中的一系列阶段。在这篇文章中,我们将深