Android Activity 学习总结第一篇

开篇语

说到 Activity 首先提到的就是生命周期、启动模式、异常情况下的生命周期,这些都是比较基础而且重要的知识,需要熟练掌握。当然也是面试经常遇到的问题。接着就是整个 Activity 的启动流程了,包括启动层面的第一次进入 app 或者当初的启动一个 Activity 中的启动流程了,这都需要结合源码分析并学习。这个准备在第二篇开始学习。今天就来总结下基础部分的知识点。

Activity 生命周期分析

首先上图
Activity 生命周期
这里面包括如下生命周期(来自开发艺术探索一书)

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

这里的几种情况再分别说明下。

  1. 正常情况下,启动一个新的 Activity ,我们将其命名为 A 。那么会依次回调 onCreate, onStart, onResume 这三个生命周期方法。
  2. 当用户再次打开一个新的 Activity 时,那么又会依次回调 A 的 onPause, onStop 方法。如果新的 Activity 使用了透明主题,那么只会回调 A 的 onPause 方法。
  3. 这个时候用户退出这个新的 Activity ,回到 A,这时会回调 A 的 onRestart, onStart, onResume 方法。
  4. 然后再退出 A ,这时会回调 A 的 onPause, onStop, onDestroy 方法。
  5. 当 A 被系统回收后再次打开,生命周期回调和 1 一致,只是生命周期回调一致,并不是所有过程都一致。
  6. 注意:当activity中弹出dialog对话框的时候,activity不会回调onPause。
    然而当activity启动dialog风格的activity的时候,此activity会回调onPause函数。

Activity 异常情况下的生命周期

资源相关的系统配置发生改变导致 Activity 被清理并重新创建

这种情况下,Activity 会先被销毁,回调 onPause, onStop, onDestroy 方法。并回调 onSaveInstanceState 来保存当前 Activity 的状态。注意这个方法的回调只会出现在 Activity 被异常终止的情况下。然后当 Activity 被重新创建后,又会依次调用 onCreate, onStart, onResume ,并且会调用 onRestoreInstanceState 方法,这时可以来恢复相关数据。

内存不足导致低优先级的 Activity 被清理

这种情况下的生命周期回调和上面一种情况一致。

防止配置发生改变后 Activity 重新创建

在 AndroidManifest 文件中配置 configChanges 属性即可,如下

android:configChanges="orientation"

可用的配置项目还有很多,这里就不一一列举了。

Activity 的启动模式

Android 中目前定义了四种启动模式,分别是:standard、 singleTop、SingleTask 和 SingleInstance。这里先介绍各自的含义。

  • standard:标准模式。每次启动 Activity 都会重新创建这个 Activity 的新的实例并运行在启动它的那个 Activity 的任务栈中。
  • singleTop:栈顶复用模式。这种模式下,只有当新建的 Activity 位于栈顶,则不会新建该 Activity 实例,而是回调其 onNewIntent 方法。
  • singleTask:栈内复用模式。这是一种单实例模式,只要当前任务栈内有需要新建的 Activity 存在,则不会新建该 Activity 实例,而是回调其 onNewIntent 方法。并将其上的其他 Activity 全部出栈。
  • singleInstance:单实例模式。这是一种加强型 singleTask 模式,该模式的 Activity 会单独位于一个任务栈内。

好了,到这里 Activity 的一些常见知识点就介绍完了。后续会更新一些实例讲解的部分。谢谢大家。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值