您的位置:首页 > 移动开发 > Android开发

android 基础知识 生命周期

2016-11-01 10:47 211 查看

1:Activity的生命周期的描述图1如下:

  


图1:activity 生命周期图

2:Activity生命周期的详细叙述:

      (1):onCreate:

                                   表示activity正在被创建,生命周期中第一个方法,可以做些初始化工作,

                                   setContentView,加载界面资源,初始化activity所需的数据!

      (2):onRestart:

                                    标识activity正在重新启动,一般情况下,activity从不可见状态变为可见状态时,

                                    onRestart就会被调用,一般情况下是由用户的行为导致的,比如用户按home键 

                                    切回到桌面或者用户打开了一个新的activity,此时当前的activity就会被暂停,

                                    onPause和onStop被执行了,接着用户又回到了该界面。

     (3):onStart:         

                                   表示该activity正在被启动,此时activity可见了,但是运行在后台,无法和用户进行交互。

     (4):onResume:

                                    表示activity已经可见了,并且出现在前台并开始活动,onStart和onResume都表示activity可见,

                                   但是onStart时activity还在后台,onResume时activity显示在前台!

     (5):onPause: 

                                  表示Activity正在被停止,正常情况下,紧接着onStop就会被调用,特殊情况下,如果这时候快速地回到当前的界面时,

                                  onResume就会被调用,这是一种极端情况,不容易被出现.正常情况下,此时可以存储写数据,停止动画等操作,

                                  但是注意不能够太耗时,因为会影响到新的activity的展示,onPause必须先执行完,新的activity的onResume才会被执行!

    (6):onStop:        

                                表示即将被停止,此阶段可以做一些稍微重量级的一些回收工作,同样不能太耗时!

    (7):onDestroy:  

                               表示即将被销毁,这是Activity生命周期中的最后一个回调,这里可以做一些回收工作和最终的资源释放!

    (8)额外提示:

                           同时有一些:onNewIntent:此调用和启动模式有关,onCreate和onStart不会被调用!

                           onSaveInstanceState:

                                                  保存实例的状态 将当前的activity的状态保存到Bunddle参数中

                           onRestoreInstanceState:
                                                 恢复之前的实例的一些状态:从Bunddle参数中获取一些状态值!

     (9)onStop时activity被系统回收:

                         当activity被系统回收,等再次打开时,生命周期和回调过程和(1)一样,只是生命周期一样,不代表所有的过程一样!

     (10):onStart和onResume,onPause和onStop有什么实质的不同:

                        onPause和onStop主要是从是否界面可见的角度来回调的,而onStart和onResume主要是从是否在前台的角度去描述的!

  

     (11)ActivityA跳转到ActivityB中的:A中的onPause先执行还是B中的onCreate,onStart,onResume先执行,以及A中的onPause和A的onStop有执行先后顺序吗?

                        结论:旧Activity中的onPause先执行成功之后,才会启动新Activity!

3:异常情况下的生命周期:   

  3.1:资源相关的系统配置发生改变导致activity被杀死并重新创建!     

            默认情况下Activity的屏幕方向发生改变后,当前activity被销毁,重新创建。过程如图3.1所示:

               

      

图3.1       

             注意:当前的Activity生命周期函数执onPause,onStop,onDestroy顺序执行,同时onSaveInstanceStateonStop之前被执行

                         但是与onPause顺序执行不确定!继而会执行Activity的onCreate,onStart,以及onRestoreInstanceState函数,onResume函数!

 

             注意:当系统配置发生改变时,导致activity被重新创建,怎么不让其重新创建,在资源清单文件中:

                    android:configChanges="orientation",其常用的“keyboardHidden”,“locale”      

     3.2:资源内存不足导致低优先级的activity被杀死!

     3.3:onSaveInstanceState与onRestoreInstanceState相关原理:

                     当Activity有异常重新创建时,系统会默认保存当去的activity的视图结构,并且在重启activity时会为我们恢复这些数据,

              其实View和Activity一样,都有继承 onSaveInstanceState和onRestoreInstanceState,系统能够自动的为View进行恢复数据!

                     关于保存和回复View的层次结构,系统的工作流程是这样的:首先Activity被意外地终止时,

               Activity会调用onSaveInstanceState函数去保存数据,继而Activity会去委托PhoneWindow去保存数据,

              PhoneWindow又会委托DecordView去保存数据,最后DecordView又会一一通知子节点去保存数据,

              这是一种典型委托思想!上层委托下层,父容器委托子容器!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: