Android群英传知识点回顾——第八章:Activity与Activity调用栈分析


  • 8.1 Activity

    • 8.1.1 起源
    • 8.1.2 Activity形态
    • 8.1.3 生命周期
  • 8.2 Activity任务栈简介
  • 8.3 ActivityManifest启动模式
    • 8.3.1 standard
    • 8.3.2 singleTop
    • 8.3.3 singleTask
    • 8.3.4 singleInstance
  • 8.4 Intent Flag启动模式
  • 8.5 清空任务栈
  • 8.6 Activity任务栈使用

四大组件中出现频率最高的组件

Activity是与用户交互的第一接口,它提供了一个用户完成指令的窗口,系统采用Activity栈的方式来管理Activity

  • Activity/Running
    Activity处于Activity栈的最顶层,可见,并与用户进行交互
  • Paused

    当Activity失去焦点,被一个新的非全屏的Activity或者一个透明的Activity放置在栈顶时,Activity就转换成了Paused形态,但它只是失去了与用户交互的能力,所有状态信息,成员变量都还保留着,只有在系统内存极地的情况下,才会被系统回收掉

  • Stopped

    如果一个Activity被另一个Activity完全覆盖,那么Activity就会进入stop形态,此时他不再可见,但却依然保持了所有状态信息和成员变量

  • Killed
    当Activity被系统回收或者Activity从来没有创建过,Activity就处于Killed状态

Google经典生命周期图:

由于Android群英传介绍的不详细,我采用Android开发艺术探索这本书介绍生命周期:

  • onCreate:表示Activity正在被创建,这是生命周期的第一个方法,在这个方法可以做一些初始化工作,比如调用setContentView去加载界面布局资源、初始化Activity所需数据等
  • onRestart:表示Activity正在重新启动,一般情况下,当当前Activity从不可见重新变为可见状态时,onRestart就会被调用,这种情形一般是用户行为所导致的,比如用户按Home键切换到桌面或者用户打开一个新的Activity,这是当前的Activity就会暂停,也就是onPause和onStop被执行了,接着用户又回到了这个Activity,就会出现这种情况
  • onStart:表示Activity正在被启动,即将开始,这时Activity已经可见了,但是还没有出现在前台,还无法和用户交互,这个时候其实可以理解为Activity已经显示出来了,但是我们还看不到
  • onResume:表示Activity已经可见了,并且出现在前台并开始活动,要注意这个和onStart的对比,onStart和onResume都表示Activity已经可见,但是onStart的时候Activity还在后台,onResume的时候Activity才显示在前台
  • onPause:表示Activity正在停止,正常情况下,紧接着onStop就会被调用,在特殊情况下,如果这个时候快速地再回到当前Activity,那么onResume会被调用,笔者的理解是,这种情况属于极端情况,用户操作很难重现这一场景,此时可以做一些存储数据、停止动画等工作,但是注意不能太耗时,因为这会影响到新Activity显示,onPause必须先执行完,新Activity的onResume才会执行
  • onStop:表示Activity即将停止,可以做一些稍微重量级的回收工作,同样不能太耗时
  • onDestroy:表示Activity即将被销毁,这是Activity生命周期最后一个回调,在这里,我们可以做一些回收工作和最终的资源释放

除生命周期外,还有Activity的状态会保存起来:

  • 如果你长时间处于stopped状态而且此时系统需要更多内存或者系统内存极为紧张时,系统会回收你的Activity,而此时系统为了补偿你,会将Activity状态通过onSaveInstanceState()方法保存到Bundle对象中,当你需要重新创建这些Activity的时候,保存的Bundle对象就会传递到Activity的onRestoreInstanceState()方法与onCreate()方法中,即可调用该方法恢复被销毁时的状态
  • 当一个App启动时,如果当前环境下不存在该App的任务栈,那么系统就会创建一个任务栈,此后,这个App所启动的Activity都将在这个任务栈中被管理,这个栈也被称为一个Task,即表示若干个Activity的集合,他们组成在一起形成一个Task,特别要注意的是,一个Task中的Activity可以来自不同的App,同一个App的Activity也可能不在一个Task中
  • 栈的结构是后进先出的线性表,通过在AndroidManifest文件中的属性android:launchMode来设置或者是通过Intent的flag来设置的

Manifest提供了四种启动模式:

  • standard
  • singleTop
  • singleTask
  • singleInstance

对于这四种启动模式可以简单的在我另一篇博客理解一下:四种启动模式

  • Intent.FLAG-ACTIVITY-NEW-TASK:使用一个新的Task来启动一个Activity,但启动的每个Aetivity都将在一个新的Task中,该Flag通常使用在从service中启动的actiity场景,由于在Service中并不存在Activity栈,所以使用该Flag来创建一个新的Activity栈,并创建新的Activity实例
  • FLAG-ACTIVITY-SINGLE-TOP:使用singletop模式来启动一个Activity,与指定android:launchMode=”singleTop”效果相同
  • FLAG-ACTIVITY-CLEAR-Top:使用SingleTask模式来启动一个Activity,与指定android:launchMode=”singleTask”效果相同
  • FLAG-ACTIVITY-NO-HISTORY:使用这种模式启动Acuvity,当该Activity启动其他AcuVity后,该Activity就消失了,不会保留在Activity栈中,例如A-B,B中以这种模式启动C,C再启动D,则当前Activity栈为ABD

系统同样提供了清空任务栈的方法让我们将一个Task全部清除,通常可以在AndroidManifest的<activity>标签中使用下面属性来清理:

  • clearTaskOnLaunch:每次返回Activity的时候,都将该Activity上的所有Activity都清除,雅思基础通过这个属性,可以让这个Task每次初始化的时候,都只有一个Activity
  • finishTaskOnLaunch:这个属性和clearTaskOnLaunch有点类似,只不过clearTaskOnLaunch作用在别人身上,而finishTaskOnLaunch作用在自己身上,通过这个属性,当离开这个Activity所处的Task,那么用户再返回的时候,该Activity会被finish掉
  • alwaysRetainTaskState:Task的一道免死金牌,如果将Activity这个属性设置为true,那么该Activity所在的Task将不接受任何清除命令,一直保持当前Task的状态

无知识点

原文地址:https://www.cnblogs.com/zhanglixina/p/9603844.html

时间: 2024-10-01 07:23:31

Android群英传知识点回顾——第八章:Activity与Activity调用栈分析的相关文章

Android群英传知识点回顾——第六章:Android绘图机制与处理技巧

6.1 屏幕的尺寸信息 6.1.1 屏幕参数 6.1.2 系统屏幕密度 6.1.3 独立像素密度dp 6.1.4 单位转换 6.2 2D绘图基础 6.3 Android XML绘图 6.3.1 Bitmap 6.3.2 Shape 6.3.3 Layer 6.3.4 Selector 6.4 Android绘图技巧 6.4.1 Canvas 6.4.2 Layer图层 6.5 Android图像处理之色彩特效处理 6.5.1 色彩矩阵分析 6.5.2 Android颜色矩阵--ColorMatr

Android群英传知识点回顾——第七章:Android动画机制与使用技巧

7.1 Android View动画框架 7.1.1 透明度动画 7.1.2 旋转动画 7.1.3 位移动画 7.1.4 缩放动画 7.1.5 动画集合 7.2 Android属性动画分析 7.2.1 ObjectAnimator 7.2.2 PropertyValuesHolder 7.2.3 ValueAnimator 7.2.4 动画事件的监听 7.2.5 AnimatorSet 7.2.6 在XML中使用属性动画 7.2.7 View的animate方法 7.3 Android布局动画

Android群英传知识点回顾——第九章:Android系统信息与安全机制

9.1 Android系统信息获取 9.1.1 android.os.Build 9.1.2 SystemProperty 9.1.3 Android系统信息实例 9.2 Android Apk应用信息获取之PackageManager 9.2.1 PackageManager 9.3 Android Apk应用信息获取之ActivityManager 9.4 解析Packages.xml获取系统信息 9.5 Android安全机制 9.5.1 Android安全机制简介 9.5.2 Andro

Android群英传知识点回顾——第二章:Android开发工具新接触

2.1 Google生态系统 2.1.1 Android Studio初体验 2.1.2 Android Studio配置 2.2 Android高级使用技巧 2.2.1 更新SDK 2.2.2 Android Studio常用界面 2.2.3 导入Android Studio工程 2.3 ADB命令使用技巧 2.3.1 ADB基础 2.3.2 ADB常用命令 2.3.2 ADB命令来源 2.4 模拟器使用与配置 Eclipse缺点: 内存占用高 经常崩溃 开发界面不美观 Android作为插件

Android群英传笔记——第八章:Activity与Activity调用栈分析

Android群英传笔记--第八章:Activity与Activity调用栈分析 开篇,我们陈述一下Activity,Activity是整个应用用户交互的核心组件,了解Activity的工作模式,生命周期和管理方式,是了解Android的基础,本节主讲 Activity的生命周期与工作模式 Activity调用栈管理 一.Activity Activity作为四大组建出现平率最高的组件,我们在哪里都能看到他,就让我们一起先来了解一下他的生命周期 1.起源 Activity是用户交互的第一接口,他

Android群英传笔记——第十二章:Android5.X 新特性详解,Material Design UI的新体验

Android群英传笔记--第十二章:Android5.X 新特性详解,Material Design UI的新体验 第十一章为什么不写,因为我很早之前就已经写过了,有需要的可以去看 Android高效率编码-第三方SDK详解系列(二)--Bmob后端云开发,实现登录注册,更改资料,修改密码,邮箱验证,上传,下载,推送消息,缩略图加载等功能 这一章很多,但是很有趣,也是这书的最后一章知识点了,我现在还在考虑要不要写这个拼图和2048的案例,在此之前,我们先来玩玩Android5.X的新特性吧!

Android群英传笔记——摘要,概述,新的出发点,温故而知新,能够为师矣!

Android群英传笔记--摘要.概述,新的出发点,温故而知新.能够为师矣! 当工作的越久,就越感到力不从心了,基础和理解才是最重要的,所以买了两本书,医生的<Android群英传>和主席的<Android开发艺术探索>.主要是再全面点的把自己所学的知识消化,这样也就不枉自己天天熬夜学习了,如今群英传快看完了.准备又一次再看一遍,同一时候把笔记以博客的形式记录下来,这样或许更加的深刻,然后再消磨一下主席的那本书,这本书有视频解说,更加好,所以估计以后应该非常少再写其它的博客,只是工

Android群英传笔记系列一view的介绍

学习完第一行代码后,继续学习Android群英传,希望能坚持下去,好好学习完这本书,并及时做好相关笔记,巩固相关知识: 一. View的介绍: 1`.我们先来看下view树结构: 2.树结构内容: a.viewparent是整棵树的核心,它统一调度和分配所有的交互管理事件. b.控件分为viewgroup和view两种控件,viewgroup作为父控件可以包含多个vie       w控件. c.我们知道在使用控件前都要通过findViewById的方法来实例化控件,那么在树结构中,实际上表现为

Android群英传笔记——第九章:Android系统信息和安全机制

Android群英传笔记--第九章:Android系统信息和安全机制 本书也正式的进入尾声了,在android的世界了,不同的软件,硬件信息就像一个国家的经济水平,军事水平,不同的配置参数,代表着一个android帝国的强弱,所以厂商喜欢打配置战,本节就要是讲 Android系统信息的获取 PackageManager的使用 ActivityManager的使用 Android安全机制 一. Android系统信息的获取 由于android手机的开源性,手机的配置各种各样,那些优化大师之类的东西