美文网首页
复习之路 一、Activity

复习之路 一、Activity

作者: Mikk丶 | 来源:发表于2019-04-24 18:19 被阅读0次

1、Activity的生命周期

生命周期onCreate() ->onStart()-> onResume() -> onPause() -> onStop() -> onDestroy()
682504-1405607172778d9b.png
  • 启动activity: 系统先调用onCreate(),然后调用onStart(),最后调用onResume()方法,activity进入运行状态。
  • activity被其他activity覆盖(DialogActivity、锁屏): 系统会调用onPause()方法,暂停当前activity执行。
  • 当前Activity转到新的Activity页面或按Home键回到主屏,自身退居后台:系统会先调用onPause()方法,然后调用onStop()方法,进入停滞状态。
  • 用户退回到此Activity:系统会先调用onRestart()方法,然后调用onStart()方法,最后调用onResume()方法,再次进入运行状态。
  • 当前Activity处于被覆盖状态或者后台不可见状态,即第2步和第4步,系统内存不足,杀死当前Activity,而后用户退回当前Activity:再次调用onCreate方法、onStart方法、onResume方法,进入运行状态。
  • 用户退出当前Activity:系统先调用onPause方法,然后调用onStop方法,最后调用onDestory方法,结束当前Activity。
  • onRestart():表示activity正在重新启动 ,一般情况下,当前activity从不可见重新变成可见状态时,onRestart()就会被调用,这种情形一般是用户行为所导致的,比如用户按HOME键切换到桌面然后重新打开APP或者按back键。

2、Activity异常情况下的生命周期

2.1、比如当资源相关的系统配置发生改变以及系统内存不足时,Activity就可能被杀死。
情况1:资源相关的系统配置发生改变导致Activity被杀死并重新创建

比如说当前Activity处于竖屏状态,如果突然旋转屏幕,由于系统配置发生了改变,在默认情况下,Activity就会被销毁并且重新创建,当然我们也可以阻止系统重新创建我们的Activity。
在默认情况下,如果我们不做特殊处理,那么当系统配置发生改变后,Activity就会被销毁并重新创建。


682504-c7df1f922a04d7c2.png

当系统配置发生改变以后,Activity会销毁,onPause、onStop、onDestroy均会被调用,由于Activity是在异常情况下终止的,系统会调用onSaveInstanceState来保存当前Activity状态,这个方法的调用实际是在onStop之前,与onPause没有既定的时序关系。
当Activity重新创建后,系统会调用onRestoreInstanceState并且把Activity销毁时onSaveInstanceState方法保存的Bundle对象作为参数同事传给onRestoreInstanceState和onCreate方法。因此,我们可以通过onRestoreInstanceState和onCreate方法来判断Activity是否被重建了,如果被重建了,那么我们就可以去除之前保存的数据并恢复,从时序上来说,onRestoreInstanceState的调用时机在onStart之后。
同时,我们要知道,在onSaveInstanceState和onRestoreInstanceState方法中,系统自动为我们做了一定的恢复工作。比如文本框中用户输入的数据,ListView滚动的位置等。这些View相关的状态系统都能够默认为我们恢复。

情况2:资源内存不足导致低优先级的Activity被杀死

同情况1数据存储和恢复完全一致,Activity安好优先级从高到底可以分为三种:

  • 前台Activity ----- 正在和用户交互的Activity,优先级最高。
  • 可见但非前台Activity ----- 比如Activity中弹出一个对话框,导致Activity可见但是位于后台无法和用户直接交互。
  • 后台Activity ----- 已经被暂停的Activity,比如执行了onStop,优先级最低。

当系统内存不足时,系统就会按照上述优先级去杀死目标Activity所在的进程,并在后续通过onSaveInstanceState和onRestoreInstanceState来存储和恢复数据。

防止重新创建就可以给configChanges属性添加orientation这个值
android:configChanges="orientation"

3、Activity启动模式 ( LaunchMode )

四种启动模式:standard、singleTop、singleTask 和 singleInstance。
  • standard : 标准模式。这也是系统的默认模式。每次启动一个 Activity 都会重新创建一个新的实例,不管这个实例是否存在。
  • singleTop : 栈顶复用模式。在这种模式下,如果新 Activity 已经位于任务栈的栈顶,那么此 Activity 不会被重新创建,同时它的 onNewIntent 方法会被回调,通过此方法的参数我们可以取出当前请求的信息。需要注意的是,这个 Activity 的 onCrate、onStart 不会被系统调用,因为它并没有发生改变。
  • singleTask : 栈内复用模式。这是一种单实例模式,在这种模式下,只要 Activity 在一个栈中存在,那么多次启动此 Activity 都不会重新创建实例,和 singleTop 一样,系统也会回调其 onNewIntent 。清除此 Activity 上方的 Activity。
  • singleInstance 单实例模式。这是一种加强的 singleTask 模式,它除了具有 singleTask 模式的所有特性外,还加强了一点,那就是具有此模式的 Activity 只能单独地位于一个任务栈中。

相关文章

  • 复习之路 一、Activity

    1、Activity的生命周期 生命周期onCreate() ->onStart()-> onResume() -...

  • Android基础复习——Activity

    Android基础复习——Activity Activty 是什么 Activity 是 Android 四大应用...

  • Activity复习要点

    Activity的生命周期 1. 返回栈(Back Stack): Android是使用Task(任务)来管理活动...

  • 浮躁,在路上

    flow :unconscious and easy involvement in an activity. 复习...

  • Android复习之旅--Activity

    【修改后】对于Activity是什么,相信大家都十分清楚了。在这里我就不扯那么多废话了。这里就说一下Android...

  • Android面试复习-Activity

    1.Android中4大组件 Activity:用户可操作的可视化界面,为用户提供一个完成操作指令的窗口。 Bro...

  • android体系复习---Activity

    一、什么是Activity Activity是与用户交互的入口点。它表示拥有界面的单个屏幕。例如,电子邮件应用可能...

  • 复习之路

    考试,就像通往山头的路,只有一座独木桥一样,不管是谁,千军万马都得在桥上走一遭。 平时学习努力的,和毫无建树的,各...

  • 复习之路

    总共分为五大部分: 论文细节及其扩展的深度学习知识 项目细节 机器学习基础知识 算法题(手撕代码) Linux常见...

  • Activity回收时不一定会走完生命流程

    官网传送门:Activities 最近在官网复习Activity生命周期时注意到,Activity在调用onPau...

网友评论

      本文标题:复习之路 一、Activity

      本文链接:https://www.haomeiwen.com/subject/qaxngqtx.html