Android四大组件之Activity篇

253 阅读3分钟

前言

以前学习的Android知识杂乱无章,形成不了一个完整的知识体系,因此打算根据知识星球的内容,完整的过一遍,首先来学习一下Activity。Activity是Android四大组件中最为重要的一个,负责直接与用户交互,先来看看Activity的生命周期

一、生命周期

官方文档给出了下面这个图

  1. onCreate(Bundle) 是Activity中除了attachBaseContext以外的第一个回调方法,该方法一般用于调用setContentView
  2. onStart() 当Activity可见时回调,注意可见不代表Activity的UI被显示出来,因为View的三大流程需要在onResume回调完后才会开始
  3. onResume() 当Activity获得了焦点后回调(开始可以与用户交互),同样的,Activity的UI也没被显示出来,因此在该方法中直接获取View的宽高拿到的都是0,回调完该方法Activity就处于运行状态了
  4. onPause() 当Activity失去了焦点后回调,该方法后面可能会调用onStop、onResume或者可能被系统杀死
  5. onStop() 当Activity不可见时回调,该方法后面可能会调用onDestoryonRestart或者可能被系统杀死
  6. onRestart() 当Activity处于stop状态后,又被切换到的前台时回调,该方法后面紧跟着onStart回调
  7. onDestroy() 当Activity将要被销毁后调用,可能的情况是finish方法被调用或者配置改变时(没有配置configChange)时回调,该回调中可以做一些资源回收等操作

重点

  • 当Activity A启动一个透明的Activity或者一个Dialog主题的Activity时,A的onStop不会调用,因为其还可见
  • 当Activity A开启一个Dialog,不会调用A的任何生命周期方法
  • 当Activity A开启Activity B会调用A.onPause - B.onCreate - B.onStart - B.Resume - A.onStop(视情况,当A完全不可见时会调用)
  • 当Activity A启动Activity B然后点击back键会回调B.onPause - (如果A处于stop状态还有A.onRestart - A.start)A.onResume - B.onStop
  • 当Activity A失去焦点后,当内存不足时系统可能会将A杀死,当点击回退后会调用A的onCreate - onStart - onResume进行重建

二、Fragment的生命周期与Activity的关系

首先来看看Fragment的生命周期

  1. onAttach(Activity) 当Fragment与Activity建立联系时调用
  2. onCreate(Bundle) 当初始化创建Fragment的时候回调
  3. onCreateView(LayoutInflate, ViewGroup, Bundle) 创建和返回Fragment显示的根View
  4. onActivityCreated(Bundle) 当与Fragment相联系的Activity完成了onCreate回调
  5. onStart() 当Fragment可见时回调
  6. onResume() 当Fragment获取焦点时回调
  7. onPause() 当Fragment失去焦点时回调
  8. onStop() 当Fragment不再可见时回调
  9. onDestoryView() 用于清除与Fragment相关联View的资源
  10. onDestory() 当Fragment将要被销毁时调用
  11. onDetach() 当调用该方法后Fragment就与Activity失去联系了

将设有Activity A在onCreate通过Replace方显示了Fragment F,生命周期调用顺序为A.onCreate - A.onStart - F.onAttach - F.onCreate - F.onCreateView - F.onViewCreate - F.onActivityCreate - F.onStart - A.onResume - F.onResume

三、Activity与menu创建先后顺序

在Activity的onResume调用完后会回调onCreateOptionMenu来创建Menu

四、使用onSavedInstanceState()和onRestoreInstanceState()保存状态

  • onSavedInstanceState 当Activity被意外的杀死或者是当配置方式改变后会回调onSavedInstanceState(在API28及以上其调用时机在onStop之后,在API28之前调用时机onStop之前与onPause无时序关系)

  • onRestoreInstanceState 再次启动后我们可以在onRestoreInstanceState中恢复onSavedInstanceState保存的数据