Android基本知识系列一之android生命周期

android基本知识汇总结之android生命周期

 1.Activity的生命周期

答:onCreate: 在这里创建界面,做一些数据的初始化工作

       onStart: 到这一步变成用户可见不可交互的

       onResume:变成和用户可交互 的,(在activity 栈系统通过栈的方式管理这些个Activity的最上面,运行完弹出栈,则回到上一个Activity)

  onPause: 到这一步是可见但不可交互的,系统会停止动画 等消耗CPU 的事情从上文的描述已经知道,应该在这里保存你的一些数据,因为这个时候你的程序的优先级降低,有可能被系统收回。在这里保存的数据,应该在

       onstop: 变得不可见,被下一个activity覆盖了

       onDestroy: 这是activity被干掉前最后一个被调用方法了,可能是外面类调用finish方法或者是系统为了节省空间将它暂时性的干掉。

2.横竖屏切换时候的activity的生命周期

答:a. 新建一个activity,并把各个生命周期打印出

          (1). 运行activity,得到如下信息:

               onCreate()

               onStart()

               onResume()

          (2). 按ctrl+F12切换成横屏时

               onSaveInstanceState()

               onPause()

               onStop()

               onDestroy()

               onCreate()à

               onStart()à

               onRestoreInstanceState()à

               onResume()à

           (3) .再按ctrl+f12切换成竖屏时,发现打印了两次相同的Log

               onSaveInstanceState()

               onPause()

               onStop()

               onDestroy()

               onCreate()

               onStart()

               onRestoreInstanceState()

               onResume()

               

               onSaveInstanceState()

               onPause()

               onStop()

               onDestroy()

               onCreate()

               onStart()

               onRestoreInstanceState()

               onResume()

        (5). 修改AndroidManifest.xml,把该Activity添加android:configChanges=“orientation”,执行步骤2

             onSaveInstanceState()

             onPause()

             onStop()

             onDestroy()

             onCreate()

             onStart()

             onRestoreInstanceState()

             onResume()

    6)  修改AndroidManifest.xml,把该Activity添加android:configChanges=“orientation”,执行步骤3,发现不会再打印相同信息,但多打印了一行                     onConfigurationChanged

        onSaveInstanceState()

        onPause()

        onStop()

        onDestroy()

        onCreate()

        onStart()

        onRestoreInstanceState()

        onResume()

        onConfigurationChanged()

    7)  把步骤5的android:configChanges=“orientation”改成android:configChanges=“orientation|keyboradHidden”,执行步骤2,就只打印

        onConfigurationChanged()

    8)  把步骤5的android:configChanges=“orientation”改成android:configChanges=“orientation|keyboradHidden”,执行步骤3,就只打印

        onConfigurationChanged()

       onConfigurationChanged()

 总结:

    1).不设置activity的android:configChanges时,横屏时会执行一次,切竖屏时会执行两次。

    2).设置activity的android:configChanges=“orientation”时, 切屏会重新调用各个生命周期,切横屏、竖屏时都只会执行一次,但是竖屏最后多打印              一条onConfigurationChanged()

    3).设置activity的android:configChanges=“orientation|keyboardHidden”时,切屏不会重新调用各个生命周期,只会执行onConfigurationChanged(),           横屏一次,竖屏两次

总结下整个activity的生命周期:

    1).当前activity产生事件弹出Toast和AlertDialog的时候Activity的生命周期不会有改变

    2)Activity运行时按下HOME键(跟被完全覆盖一样的)

       onSavaInstanceState

      onPauseà

      onStop

      onRestart

      onStart

      onResume

    3)  未被完全覆盖,只是失去焦点:

        onPause

        onResume

3.说明onSaveInstanceState() 和 onRestoreInstanceState()在什么时候被调用

答:Activity的 onSaveInstanceState() 和 onRestoreInstanceState()并不是生命周期方法,它们不同于 onCreate()、onPause()等生命周期方法,它们并不一定会被触发。当应用遇到意外情况(如:内存不足、用户直接按Home键)由系统销毁一个Activity时,onSaveInstanceState()才会被调用。但是当用户主动去销毁一个Activity时,例如在应用中按返回键,onSaveInstanceState()就不会被调用。因为在这种情况下,用户的行为决定了不需要保存Activity的状态。通常onSaveInstanceState()只适合用于保存一些临时性的状态,而onPause()适合用于数据的持久化保存。
另外,当屏幕的方向发生了改变, Activity会被摧毁并且被重新创建,如果你想在Activity被摧毁前缓存一些数据,并且在Activity被重新创建后恢复缓存的数据。可以重写Activity的 onSaveInstanceState() 和 onRestoreInstanceState()方法。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值