android的生命周期

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了android的生命周期相关的知识,希望对你有一定的参考价值。

参考技术A 单个Actiivty正常的生命周期

onCreate -> onStart -> onResume -> onPause -> onStop -> onDestory

这就是一个Activity从被创建到被销毁过程。

其中正常运行状态为onResume

当Activity从前台被置于后台,
onResume -> onPause -> onStop

当从后台重新置于前台
onStop -> onPause -> onResatrt -> onStart-> onResume

其中可以发现,只要Activity置于前台都会执行onStart函数,所以我们可以考虑在这里做一下需要在前台就处理的逻辑

各个生命周期函数:
onCreate: Activity被创建,此时Activity处于不可见、不可交互
onStart: 此时Activity 部分可见不可交互
onRestart: Activity从后台重新回到前台,部分可见不可交互
onResume: 完全可见可交互,为Activity正常运行状态
onPause: Activity处于暂停,从前台被置于后台 部分可见部分不可见,不可交互
onStop: 完全置于后台,完全不可见,
onDestroy: Activity被销毁

上面就是一个正常的Activity的生命周期,

在Activity生命周期中,还设计一些其他:
Activity旋转:
onCreate -> onStart -> onResume
此时被旋转
-> onPause -> onSaveInstanceState -> onStop -> onDestroy -> onCreate -> onStart -> onRestoreInstanceState -> onResume

可以发现当Activity被旋转时,整个Activity是被销毁然后重新创建的。其中新增调用了两个生命周期函数
onSaveInstanceState: 当Activity被系统异常销毁时被调用,用于存储数据,用于系统恢复Activity时恢复数据
onRestoreInstanceState: 当Actiivty被系统异常销毁并重新创建时,取出在onSaveInstanceState时存储的数据

注意,在onCreate函数中,其实也是有参数的

此处的savedInstanceState也是在onSaveInstanceState时存储的数据,但此处可能为nll,
因为在正常的Activity时,此处就是null,只有在Activity被异常销毁然后被系统重新创建时,此处才有值。
如果要在此处使用,切记要判空。

onNewIntent与Activity的启动模式有关

当Activity未设置启动模式时,则不会触发该生命周期函数

当Activity已经处于应用的Activity栈中

onNewIntent只会在Activity设置了启动模式,并且Activity被复用时才会调起。

注意:只对startActivityForResult调起的Activity起作用,statActivity本质调用的也是startActivityForResult,Activity正常的切换前后台时不会触发的。

A -> B:
A正常运行处于 onResume,打开B

A onPause -> B onCreate -> B onStart -> B onResume -> A onStop
点击跳入B页面, 首先A进入暂停,B开始创建,到onResume完全可见可交互,于是A被完全遮挡,变成完全不可见、处于后台,进入onStop

A -> B ->goBack-> A

在B页再执行返回

B onPause -> A onRestart -> A onStart -> A onResume -> B Stop -> B onDestory
和A进入B类似,B返回A时,B进入暂停,A变得重新可见到A完全可见,进入onResume,然后B进入停止,并销毁

B启动模式设置为 SingleTop,B -> B
B onPause -> B onNewIntent -> B onResume
因为 B已经处于栈顶,启动模式为 SingleTop 则不会重新创建B的实例

将A的启动模式设置为SingleTask

可以通过在andorid studio的终端 Terminal中输入:adb shell dumpsys activity
查看当前应用的Activity task栈

(Android第一行代码活动的生命周期)生命周期

活动的生命周期

  掌握活动的生命周期对任何 Android开发者来说都非常重要,当你深入理解活动的生命 周期之后,就可以写出更加连贯流畅的程序,并在如何合理管理应用资源方面,你会发挥的 游刃有余。你的应用程序将会拥有更好的用户体验。

 


  •     返回栈

   1.  定义: Android是使用任务(Task)来管理活动的,一个任务就是一组存放在栈里的活动 的集合这个栈也被称作返回栈(Back Stack)。

   2. 栈顶:存放刚启动的一个新的活动。(当我们 按下 Back键或调用 finish()方法去销毁一个活动时,处于栈顶的活动会出栈,这时前一个入 栈的活动就会重新处于栈顶的位置。系统总是会显示处于栈顶的活动给用户。)

  •     活动状态

     1.运行状态:活动位于返回栈的栈顶时(系统最不愿意回收的 就是处于运行状态的活动,因为这会带来非常差的用户体验。)

     2.暂停状态:当一个活动不再处于栈顶位置,但仍然可见时(比如某个活动上面新开了个对话框活动该活动就是暂停活动-系统也不愿意去回收这 种活动。)

     3.停止状态:当一个活动不再处于栈顶位置,并且完全不可见的时候,就进入了停止状态。(系统 仍然会为这种活动保存相应的状态和成员变量,但很容易被回收)

     4.销毁状态:当一个活动从返回栈中移除后就变成了销毁状态(系统会最倾向于回收处于这种状 态的活动,从而保证手机的内存充足。)

 

         

以上是关于android的生命周期的主要内容,如果未能解决你的问题,请参考以下文章

Android生命周期绑定

Android Activity生命周期解析

android 怎么打印service生命周期

android对应生命周期中应该释放哪些资源

(Android第一行代码活动的生命周期)生命周期

Android基础——控件的混合生命周期