zoukankan      html  css  js  c++  java
  • Android开发之---Activity生命周期

      Android开发中,有四大组件:Activity、Service、Content Provider、Broadcast Receiver,可以说,activity的使用是最频繁的了,这里来梳理一下与activity相关的生命周期和启动模式的知识。

      在正常情况下,指内存充足,有用户参与情况下,activity的生命周期过程如下图所示:

      

      当我们启动Activity_A时,经历如下步骤:

      1. onCreate函数被调用,该函数主要进行页面布局资源的初始化和数据初始化;

      2. onStart函数被调用,此时页面控件树已加载完成,但是还没展示出来,还在后台

      3. onResume函数被调用,此时页面显示在前台,处于活动状态                         (这3步是启动一个acitivity会经历的)

      4. 用户触发Activity_B启动

      5. Activity_A的onPause函数被调用,在这里可以进行数据存储、动画停止等操作,但是不能进行耗时操作,让新的activity尽快显示出来,更多的资源回收可在onStop处理,否则影响Acvitiy_B的显示,因为Activity_B的onResume函数需要在Activity_A的onPause函数执行完才执行

      6. Activity_A的onStop调用,回收资源                                                         (5、6步是当前栈顶activity退出前台时会被调用)

      7. 进入Activity_B

      8. 用户触发返回Activity_A

      9. Activity_A的onRestart函数调用,回到第二步

      10. 退出Activity_A,调用次序为: onPause --> onStop --> onDestroy

      Activity在Android源码的路径为:{USER_PATH}/android-5.0.0_r7_code/frameworks/base/core/java/android/app/*.java,如下:

      

      当发生异常情况,如横竖屏变化、内存不足时,activity可能会被系统回收,这时情况如下:

      默认系统会帮我们保存现场,如视图结构、已输入的部分数据,销毁时,会在onPause或onStop之后调用onSaveInstanceState,在重建activity时,在onStart后系统调用onRestoreInstanceState恢复现场。我们看看ScrollView源码怎么处理的:

      

        scrollview的这个功能支持在4.3版本后才有的。在writeToParcel里系统保存了scrollview的滑动位置,用于后面重建activity时恢复现场。

        类似的,可以看源码来了解其他控件是保存了什么数据。

      如果在异常情况发生时,需要自定义保存的数据,建议使用onSaveInstanceState和onResotreInstanceState来进行处理,当然,也可在onCreate使用其传入的参数来获取,但是注意需要进行null的判断,因为第一次启动activity值是空的。

       如果需要系统忽略默认的配置变化后的调用行为,可以在清单文件加入android:configChanges="..."配置,如为:android:configChanges="orientation|screenSize"(在minSDKVersion和targetSDKVersion均大于13时,需要orientation和screenSize都加上,这个和编译环境有关),那么,在横竖屏发生时,需要重写onConfigurationChanged(Configuration newConfig)来进行自定义处理,系统这是不会调用onCreate来重建activity了。除了orientation属性,local属性也很常用,在修改了app使用的语言后,重新刷新页面时用到。

  • 相关阅读:
    POJ 3126 Prime Path
    POJ 2429 GCD & LCM Inverse
    POJ 2395 Out of Hay
    【Codeforces 105D】 Bag of mice
    【POJ 3071】 Football
    【POJ 2096】 Collecting Bugs
    【CQOI 2009】 余数之和
    【Codeforces 258E】 Devu and Flowers
    【SDOI 2010】 古代猪文
    【BZOJ 2982】 combination
  • 原文地址:https://www.cnblogs.com/linjk/p/6133138.html
Copyright © 2011-2022 走看看