android Activity生命周期

作者: 楊帥 | 来源:发表于2017-06-10 17:39 被阅读91次

    Activity为android四大组件之首,也是使用最频繁的一种组件,直接翻译为活动,意思比较好理解:

    比方说我要组织一次Party,Party包括吃饭、K歌,那么Party就相当于整个app项目,吃饭和K歌相当于其中的两个activity,具体吃什么,怎么吃,唱什么歌,怎么唱,都在activity内部决定。

    1. activity生命周期简介

    activity生命周期

    (1) onCreate,表示activity正在被创建,这是生命周期的第一个方法,一般做一些初始化工作,比方说serContentView、init一些activity所需数据等等。

    (2) onRestart,标识activity正在重新启动,从图中也看到了,首次启动activity的时候,是不会调用onRestart方法的,但如果按了Home键或者切换activity,使该activity从不可见到可见,就会走onRestart方法。

    (3) onStart,标识activity正在被启动,即将开始,但此时activity还不可见,我们看不到。

    (4) onResume,标识activity已经可见,此时activity我们才能看到。
    【说明:这时候我们可以抽象的想象一下activity的显示过程,比方说你有一份文件要交给领导,onStart的时候表示你拿起文件向领导办公室走,但是领导并没有看到你的文件,onResume的时候表示已经把文件交到领导手中,领导能看到了】

    (5) onPause,标识actrivity正在停止,这时activity我们还能看到,这时候如果我们回到activity,就会调用onResume方法。由于此方法直接和用户交互,不建议做耗时操作,影响用户体验。

    (6) onStop,表示activity即将停止,此时activity不可见,如activity还要被重新启动,建议操作都在这里进行。
    【说明:参照onStart和onResume说明,这里我们应该如何理解?】

    (7) onDestroy,标识activity即将被销毁,这是activity生命周期最后一个回调,在这里我们可以做一些回收工作和最终的资源释放。

    2. 典型情况下启动流程:

    (1) 第一次启动:onCreate -> onStart -> onResume

    (2) 当用户打开新的activity或切换到桌面的时候:onPause -> onStop (如果activity采用透明主题,那么当前acvitity不会调用onStop)

    (3) 当用户再次回到原acvitity时:onRestart -> onStart -> onResume

    (4) 当用户按back键或者调用finish方法:onPause -> onStop -> onDestroy

    (5) 当acvitity被系统回收后再次打开,生命周期方法回调过程和(1)一样,此情况为异常情况,具体过程参照异常启动流程

    (6) 结合生命周期图,从整个生命周期来说,onCreate和onDestroy是配对的,并且只有一次调用,onStart和onStop对应,onResume和onPause对应,代表着设备屏幕的点亮和熄灭,可多次被调用

    3. 异常情况下启动流程:

    activity异常情况启动流程图

    (1) 先介绍两个方法,onSaveInstanceState和onRestoreInstanceState,这两个方法什么作用呢?

    · onSaveInstanceState 当activity是在异常情况下终止时候,系统会调用onSaveInstanceState来保存当前activity的状态,这个方法的调用十几是在onStop之前,他和onPause没有既定的时序关系,这个方法只会出现在activity被异常终止的情况下。

    测试

    · onRestoreInstanceState如图中所测试,正常情况下,并不会调用onRestoreInstanceState,当activity被重新创建后,系统会调用onRestoreInstanceState方法,并且把activity销毁时onSaveInstanceState所保存的Bundle对象作为参数同时传递给onRestoreInstanceState和onCreate方法。

    (2) 具体都有什么情况下才算异常情况启动呢?
    情况1,资源相关的系统配置发生改变导致activity被杀死,比方说为了兼容不同设备,我们在不同的目录下放置不同的图片资源,此时当手机横竖屏切换,由于系统的配置发生了改变,在默认的情况下,activity就会被销毁并且重建。重建的时候就属于异常启动。
    情况2,资源内存不足导致activity被杀死,这个经常能碰到,比方说从一个app切换到另外一个app,如果这时内存不足,置于后台的activity就会被回收,再次切换回来,就属于异常启动。

    (3) 如果针对异常启动情况有任何其他操作需求,比方说:如果出现异常启动,发给服务器一条统计消息,可以重写onSaveInstanceState和onRestoreInstanceState两个方法,在方法内部进行适当的处理。

    相关文章:android Activity启动模式LaunchMode

    本文为本人学习笔记,如有任何问题,欢迎评论中指出,感激不尽!
    二维码.jpg

    推荐下本人的微信公众号,本博客及其他方面的消息会定期同步到公众号上面!

    相关文章

      网友评论

        本文标题:android Activity生命周期

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