Android 基础回顾:Activity 基础

【Android基础回顾】五:AMS(Activity Manager Service) Android 的 AMS(Activity Manager Service)是 Android 系统中的核心服务之一,负责管理整个应用生命周期、任务栈、进程和四大组件(Activity、Service、BroadcastReceiver、ContentProvider)的运行。它运行在系统进程 system_server 中,是 Android Framework 层的关键服务。 阅读详情

1、Activity 的生命周期

1.1 一般情况下的生命周期

下图是一般情况下一个 Activity 将会经过的生命周期的流程图:

Activity的生命周期

关于上图中生命周期方法的说明:

  1. onCreate() / onDestroy():onCreate() 表示 Activity 正在被创建,可以用来做初始化工作;onDestroy() 表示 Activity 正在被销毁,可以用来做释放资源的工作;
  2. onStart() / onStop():onStart() 在 Activity 从不可见变成可见的时候被调用;onStop() 在 Activity 从可见变成不可见的时候被调用;
  3. onRestart():在 Activity 从不可见到变成可见的过程中被调用;
  4. onResume() / onPause():onResume() 在 Activity() 可以与用户交互的时候被调用,onPause() 在 Activity 不可与用户交互的时候被调用。

所以根据上面的分析,我们可以将Activity的生命周期概况为:创建->可见->可交互->不可交互->不可见->销毁。因此,我们可以得到下面的这张图:

1.2 特殊情况下的生命周期

这里我们总结一下在实际的使用过程中可能会遇到的一些 Acitivity 的生命周期过程:

  1. 当用户打开新的 Activity 或者切换回桌面:会经过的生命周期为 onPause()->onStop()。因为此时 Activity 已经变成不可见了,当然,如果新打开的 Activity 用了透明主题,那么 onStop() 不会被调用,因此原来的 Activity 只是不能交互,但是仍然可见。
  2. 从新的 Activity 回到之前的 Activity 或者从桌面回到之前的 Activity:会经过的生命周期为 onRestart()->onStart()-onResume()。此时是从 onStop() 经 onRestart() 回到 onResume() 状态。
  3. 如果在上述 1 的情况下,进入后台的 Activity 因为内存不足被销毁了,那么当再次回到该 Activity 的时候,生命周期方法将会从 onCreate() 开始执行到 onResume()。
  4. 当用户按下 Back 键时:如果当前 Activity 被销毁,那么经过的生命周期将会是 onPause()->onStop()->onDestroy()。

具体地,当存在两个 Activity,分别是 A 和 B 的时候,在各种情况下,它们的生命周期将会经过:

  1. Back 键 Home 键
    1. 当用户点击 A 中按钮来到 B 时,假设 B 全部遮挡住了 A,将依次执行:A.onPause()->B.onCreate()->B.onStart()->B.onResume->A.onStop()。
    2. 接1,此时如果点击 Back 键,将依次执行:B.onPause()->A.onRestart()->A.onStart()->A.onResume()->B.onStop()->B.onDestroy()。
    3. 接2,此时如果按下 Back 键,系统返回到桌面,并依次执行:A.onPause()->A.onStop()->A.onDestroy()。
    4. 接2,此时如果按下 Home 键(非长按),系统返回到桌面,并依次执行A.onPause()->A.onStop()。由此可见,Back 键和 Home 键主要区别在于是否会执行 onDestroy()。
    5. 接2,此时如果长按 Home 键,不同手机可能弹出不同内容,Activity 生命周期未发生变化。
  2. 横竖屏切换时 Activity 的生命周期
    1. 不设置 Activity 的 android:configChanges 时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次。
    2. 设置 Activity 的 android:configChanges=“orientation” 时,切屏还是会重新调用各个生命周期,切横、竖屏时只会执行一次。
    3. 设置 Activity 的 android:configChanges=“orientation|keyboardHidden” 时,切屏不会重新调用各个生命周期,只会执行 onConfiguration() 方法。

1.3 onSaveInstanceState() 和 onRestoreInstanceState()

当 Activity 被销毁的时候回调用 onSaveInstanceState() 方法来存储当前的状态。这样当 Activity 被重建的时候,可以在 onCreate() 和 onRestoreInstanceState() 中恢复状态。

对于 targetAPI 为 28 及以后的应用,该方法会在 onStop() 方法之后调用,对于之前的设备,这方法会在 onStop() 之前调用,但是无法确定是在 onPause() 之前还是之后调用。

onRestoreInstanceState() 方法用来恢复之前存储的状态,它会在 onStart() 和 onPostCreate() 之间被调用。此外,你也可以直接在 onCreate() 方法中进行恢复,但是基于这个方法调用的时机,如果有特别需求,可以在这个方法中进行处理。

2、Activity 的启动模式

Activity 共有四种启动模式:

  1. standard:默认,每次启动的时候会创建一个新的实例,并且被创建的实例所在的栈与启动它的 Activity 是同一个栈。比如,A 启动了 B,那么 B 将会与 A 处在同一个栈。假如,我们使用 Application 的 Context 启动一个 Activity 的时候会抛出异常,这是因为新启动的 Activity 不知道自己将会处于哪个栈。可以在启动 Activity 的时候使用 FLAG_ACTIVITY_NEW_TASK。这样新启动的 Acitivyt 将会创建一个新的栈。
  2. singleTop:栈顶复用,如果将要启动的 Activity 已经位于栈顶,那么将会复用栈顶的 Activity,并且会调用它的 onNewIntent()。常见的应用场景是从通知打开 Activity 时。
  3. singleTask:单例,如果启动它的任务栈中存在该 Activity,那么将会复用该 Activity,并且会将栈内的、它之上的所有的 Activity 清理出去,以使得该 Activity 位于栈顶。常见的应用场景是启动页面、购物界面、确认订单界面和付款界面等。
  4. singleInstance:这种启动模式会在启动的时候为其指定一个单独的栈来执行。如果用同样的intent 再次启动这个 Activity,那么这个 Activity 会被调到前台,并且会调用其 onNewIntent() 方法。

3、Activity 的 Flags

  1. FLAG_ACTIVITY_CLEAR_TOP : 会清理掉该栈中位于 Activity 上面的所有的 Activity,通常与 FLAG_ACTIVITY_NEW_TASK 配合使用;
  2. FLAG_ACTIVITY_SINGLE_TOP: 同样等同于 mainfest 中配置的 singleTop;
  3. FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS: 对应于 mainfest 中的属性为android:excludeFromRecents="true",当用户按了 “最近任务列表” 时,该任务不会出现在最近任务列表中,可达到隐藏应用的目的。
  4. FLAG_ACTIVITY_NO_HISTORY: 对应于 mainfest 中的 android:noHistory="true"。这个 FLAG 启动的 Activity,一旦退出,它不会存在于栈中。
  5. FLAG_ACTIVITY_NEW_TASK: 等同于 mainfest 中配置的 singleTask.
Android基础知识整合篇——Activity知识点 Android基础知识部分整合连载篇——四大组件——Activity     今天,我着手开始android基础知识总体整合以及复习(结合郭霖大神的《第一行代码》),来对我这段时间碎片化的知识进行总结和整理,写下这些连载博文为的是方便读者对基础知识的回顾,以及我自己对所学知识点的消化。也希望博客能给诸位一点小小的帮助,也就是对我码三小时这么多字最大的回报了。     之前很多都是碎片化的学 阅读详情

相关推荐

android-Junit测试单个activity一

这两天没事看了点跟安卓测试有关的文章,发现国内手机测试资料并不多。但是英文看不很懂,所以就先写点基础的测试代码做为记录吧。希望国内更多大神分享手机测试经验。我也不知道什么时间开始就喜欢上了测试,那种喜欢就是莫名其妙没有任何理由的就喜欢上了,看了Android单元测试(二):再来谈谈为什么这篇文章作者一系列的测试文章后,其实我觉得还有非常重要一点的原因是支撑你写测试代码的动力,那就是喜欢。当你不为什

wangbin_learn的博客 4874

AndroidManifest<activity>中的android:noHistory

当在activity中设置了该属性后,当该activity为不可见状态时,系统会自动地将该activity做出栈操作。由此所带来的效果就是: 如果activityB设置了该属性值,activityA启动activityB,activityB再启动activityC,在由c按返回键之后,会直接跳转到a。 代码如下: <activity android:noHi...

浩浩的代码花园 486

首个FDA认证开源医学影像AI平台Comp2Comp:从CT自动分析到临床部署全解析

深度学习模型在医学影像分析领域正成为变革性力量,其核心原理是通过卷积神经网络自动学习图像特征,实现精准分割与检测。这一技术价值在于将高度依赖医生经验的定性、主观判断,转化为高效、客观、可重复的定量分析,极大提升了诊断的一致性和工作效率。在应用场景上,医学影像AI已广泛渗透于疾病筛查、辅助诊断、预后评估及治疗方案规划等多个环节。本文聚焦于获得FDA 510(k)认证的开源平台Comp2Comp,它集成了主动脉钙化评分和椎体骨密度分析双任务,通过串联式的U-Net分割网络与目标检测模型,构建了从DICOM预处理

weixin_33725126的博客 653

android属性之noHistory

有没有这样的需求?跳出某个Activity之后,其作为跳板的作用完成了,自然也就没有存在的必要了(点击返回键时不想再看到它)。这里就要介绍noHistory属性,设置这个属性为true的Activity不可见之后,其记录就会被抹去,杀Activity于无形,当然其默认值也是为false。下面举个例子说明一下,还是两个Activity,一个MainActivity,一个ActivityTest。Ma

张亚运的专栏 7964

一文读懂Cache一致性原理

本文介绍了为什么需要维护cache一致性、一致性协议的本质和类别,以及如何设计一致性协议。

W1Z1Q的专栏 6830

【MM小贴士】关于SAP系统中关税的处理方式

的运费,这部分来讲,我们关税的计价基础,就应该是货物价值+包邮到中国港口的运费,完后进行报关操作,缴纳关税,后半段从中国港口拉回到企业里面的运输费,就会做到费用里面去,而不是计入到存货成本。1、我们自己的企业和国外厂家A购买一项物资,厂家A的报价会分成几个组成部分货物本身的价值或者货物本身的价值+到国外港口的运费或者货物本身的价值+到中国港口的运费或者货物本身的价值+包邮到你们自己企业的整体运费。所以我的关税就是不确定的。重点是运费是哪一段的运费,如何结算,结算的货币,何时能够确定运费。.........

竹大的博客 9021

几个常用的Activity属性

android:noHistory 用户离开视图,系统就会销毁这个视图 官方定义 当用户离开 Activity 并且其在屏幕上不再可见时,是否应从 Activity 堆栈中将其移除并完成(调用其 finish() 方法)—“true”表示应将其完成,“false”表示不应将其完成。 默认值为“false”。 “true”一值表示 Activity 不会留下历史轨

橘子味''的博客 1585

深入理解DQN中的Q值:核心概念和应用

在强化学习中,Q值(或称为动作价值函数)是核心概念之一。Q值函数 ( Q(s, a) ) 表示在给定状态 ( s ) 下,采取动作 ( a ) 并遵循某策略后,智能体从当前状态到未来状态所能获得的预期总回报。简言之,Q值是评估特定状态和动作对的好坏的指标。

qlkaicx的博客 2975

Task和Activity相关-转帖

Task和Activity相关<br />这段时间在做一个项目,发现对Task和Activity掌握的还是不牢固。把相关知识整理在这里,方便查阅,有几个Flag没看明白啥意思,也没测试出来效果如何。。。<br /> <br /> android:allowTaskReparenting<br />     用来标记Activity能否从启动的Task移动到有着affinity的Task(当这个Task进入到前台时)——“true”,表示能移动,“false”,表示它必须呆在启动时呆在的那个Task里。

Mirage520的专栏 1091

IFIX5.8在Win10系统下的安装避坑指南

本文提供了IFIX5.8在Windows 10系统下的详细安装教程与避坑指南。针对常见的驱动缺失、UAC拦截及兼容性报错等问题,文章从安装前准备、分步安装流程到安装后配置与驱动修复,给出了系统性的解决方案,帮助工控从业者顺利完成部署。

f6g7h8i9j的博客 363

OPC DCOM详细配置方法 - 不关防火墙不换登陆用户

1. 前言   OPC DCOM的设置是实现跨网络OPC通信的基础,现有的一些OPC DCOM配置教程虽然讲解了如何配置DCOM,但没有讲清楚为什么要这么做,而且各个教程涉及的配置方法也不尽相同。   为了彻底搞清楚OPC DCOM的配置过程,我重新做了两台机器的系统,一台是Windows 7 32位,一台是Windows 10 64位,并且重零开始完整的测试了正常运行OPC DCOM所需的最少的...

steventian72的博客 3万+

android:noHistory

android:noHistory 当用户离开 Activity 且屏幕上不再显示该 Activity 时,是否应从 Activity 堆栈中将其移除并完成(调用其 finish() 方法)—“true”表示应将其完成,“false”表示不应将其完成。默认值为“false”。 “true”一值表示 Activity 不会留下历史跟踪记录。它不会留在任务的 Activity 堆栈内,因此用户将无法返...

wangjicong_215的博客 723

最短线性递推式求解与有理函数重建

这一算法来自于我们对“线性递推式拟合”的视角转换,其后得到的算法是自然的。 引理 1. 如果两个有理分式 p1/q1,p2/q2p_1/q_1, p_2/q_2p1​/q1​,p2​/q2​ 均有 deg⁡p<n,deg⁡q≤n\deg p<n, \deg q\leq ndegp<n,degq≤n 且展开式 p1/q1≡p2/q2(modx2n)p_1/q_1 \equiv p_2/q_2 \pmod {x^{2n}}p1​/q1​≡p2​/q2​(modx2n),那么 p1/q1=p2/

Entropy Increaser 的博客 2589

安卓基础回顾1:Activity的生命周期

Activity的生命周期 一.返回栈 首先要了解Activity的生命周期就必须了解返回栈。 二.活动的状态 每个活动在其生命周中最多可能会有4种状态 1.运行状态 (Active/Running) Activity处于活动状态,此时Activity处于栈顶,是可见状态,可与用户进行交互。 2.暂停状态(Paused) 当Activity失去焦点时,或被一个新的非全屏的...

qq_38845493的博客 239

Mac版 Android Studio自带模拟器无法联网解决方案

前言 作为一枚安卓开发者,免不了使用模拟器来开发调试(毕竟它比手机方便太多)。但是因为适配需要,我们会更多的使用真机开发调试,那么当模拟器遇到这样那样的问题,我们往往会无从下手,其中最烦的就是网络问题。 我最近图方便,又重新用起了模拟器,但是发现联网失败,用模拟器内置的浏览器也打不开网页,于是百度上一通找,毫无效果,各种说用cmd命令行设置模拟器dns的都没用,显示没有什么dns文件啥的,后来...

陈万洲的专栏 1万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

安卓基础回顾9:Fragment与activity的通信

Fragment与activity的通信 一.Frament控制Activity中的控件 1.在fragment中找到当前视图 2.修改成 3.在activity中添加改变text的方法 4.对FragmentOne中的TextView添加单击事件,使点击后改变activity中的Text 注意:下图红框非常重要请看代码注释 实现效果: ...

qq_38845493的博客 312

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Android基础:Activity回顾(生命周期、启动模式)

2017年的第一篇博客、今天开始整理以下Android所学到的东西,这次整理Android基础篇。 四大组件最常用的莫过于Activity。本文讲从activity生命周期和启动模式 一、Activity的生命周期 activity生命周期.png 以上是来自官方的生命周期图、看再多的博客都不如理解这样图来的快。 Activity主要有以下几种执行流程

Harlan的专栏 354

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

安卓API指南之Activity回顾

本系列的文章全部为学习摘要,不偏重各种细节展示,更多的是安卓体系重要节点的罗列,并适时加入少量自己的理解分析,以便能快速的回顾安卓体系结构和那些重要的技术点。 每个 Activity 都会获得一个用于绘制其用户界面的窗口。窗口通常会充满屏幕,但也可小于屏幕并浮动在其他窗口之上。比如透明主题或者Dialog主题的Activity。一个应用通常由多个彼此松散联系的 Activity 组成。Activit

CysionLiu的博客 386

14天学会安卓开发(第二天)Android程序设计基础activity和intent

14天学会安卓开发   作者:神秘的N (英文名  corder_raine) 联系方式:369428455(反馈) 交流群:284552167(示例,原文档下载) 版权为作者所有,如有转载请注明出处 目录 第二天Android程序设计基础... 31 2.1 深入了解安卓... 31 2.1.1 工程结构解析... 32

corder_raine的专栏 2426

Android Activity生命周期详解

Activity作为Android的四大组件之一,非常的重要,也是最常用的四大组件,使用Activity必须要在AndroidManifest中进行注册,那么作为Android的基础,Activity的生命周期你是否完全掌握了呢?下面就让我们来一起回顾一下Activity的生命周期吧! 首先,你需要知道 Activity的生命周期分为两种。   典型情况下的生命周期(就是我们开发中经常用到的...

李家大大大公子 2万+

【Android】基础回顾--四大组件

继承至BroadcastReceiver基类重写onReceiver()方法广播接收器收到相应广播后,会自动回调onReceiver()方法;一般情况下,onReceiver方法会涉及与其他组件之间的交互,如发送Notification、启动service等等;默认情况下,广播接收器运行在UI线程,因此onReceiver方法不能执行耗时操作,否则可能ANR。

2303_79296612的博客 3952

Android 基础回顾:Fragment 基础

1、Fragment 的生命周期 1.1 Fragment 的生命周期 下面是 Fragment 的生命周期的流程图: 从上图可以看出,Fragment 的生命周期相比于 Activity,在创建的过程中增加了 onAttach()、onCreateView() 和 onActivityCreated() 三个方法,在销毁的过程中增加了 onDestroyView() 和 onDetach() ...

你好,开发者 847

四大组件系列--Activity回顾

概念 Activity是一个应用的组件,他在屏幕上提供一个区域,这个区域用户可以操作,与之交互,他可以充满整个屏幕或者比屏幕小,也可以在其他窗口的上方,总之一句话:它用于显示用户操作界面,用户可以与他交互,一个应用可以有多个Activity,负责UI元素的加载和页面的跳转,代表一个页面单元 生命周期 代码表示: public class TestLifeCycleActivity extends ...

匿名的博客 435

基础总结篇之一:Activity生命周期

子曰:溫故而知新,可以為師矣。《論語》 学习技术也一样,对于技术文档或者经典的技术书籍来说,指望看一遍就完全掌握,那基本不大可能,所以我们需要经常回过头再仔细研读几遍,以领悟到作者的思想精髓。 近来回顾了一下关于Activity的生命周期,参看了相关书籍和官方文档,也有了不小的收获,对于以前的认知有了很大程度上的改善,在这里和大家分享一下。 熟悉javaEE的朋友们都了解servlet技术,

LiuHe 57万+

Android源码分析 - 回顾Activity启动流程

从zygote跟踪到activity的onResume(),探究activity到底是怎么启动的。基于Android8.0。Android9.0大同小异,但Android10之后,activity的管理将转移到atms。

深海流浪汉 669

Android系统回顾(六):Activity详解

1、Android应用程序不能控制自己的进程的生存期。Android运行时管理着每个应用程序的进程。也就是说Android运行时管理着所有的Activity。 2、正如前文《Android系统回顾(四):Android应用程序的生命周期》里提到的那样,Activity的状态还可以影响其所在的应用程序的优先级。而反过来,应用程序的优先级又会影响其所包含的Activity。 3、Android运行

YongYu_IT的专栏 726
上一篇: Android 性能优化 - 布局优化
下一篇: Android 基础回顾:Fragment 基础
开发者如是说
博客等级 码龄10年 67粉丝 163原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值