• Android Studio 单刷《第一行代码》系列 06 —— Fragment 生命周期


    前情提要(Previously)

    本系列将使用 Android Studio 将《第一行代码》(书中讲解案例使用Eclipse)刷一遍,旨在为想入坑 Android 开发,并选择 Android Studio 作为开发 IDE 的同学开路。
    PS:其实我就是现学现卖,希望我能坚持刷完。

    在前面刚学习了Fragment,这次来了解一下她的生命周期。

    系列目录在此:

    Fragment 的生命周期

    先来看一下 Fragment 的生命周期图解吧。

    fragment_lifecycle

    与 Activity 的 关系

    Fragment 必须是依存于 Activity 而存在的,因此 Activity 的生命周期会直接影响到 Fragment 的生命周期。Android 官网这张图很好的说明了两者生命周期的关系,如下

    activity_fragment_lifecycle

    跟 Activity 比较,多了下面几个回调函数:

    1. onAttach(),当 Fragment 和 Activity 建立关联时调用。
    2. onCreateView(),当为 Fragment 创建视图时调用。
    3. onActivityCreated(),与 Fragment 关联的 Activity 已经创建完毕时调用。
    4. onDEstroyView(),当与 Fragment 关联的视图被移除时调用。
    5. onDetach(),当 Fragment 和 Activity 接触关联是调用。

    体验 Fragment 的生命周期

    打开上一篇 Android Studio 单刷《第一行代码》系列 05 —— Fragment 基础 中的 FragmentTest 项目,修改 RightFragment 中的代码,重写每一个回调方法在里面加上输出日志,代码如下:

    public class RightFragment extends Fragment {

      public static final String TAG = "RightFragment";
    
      @Override
      public void onAttach(Activity activity) {
          super.onAttach(activity);
          Log.d(TAG, "onAttach");
      }
    
      @Override
      public void onCreate(Bundle savedInstanceState) {
          super.onCreate(savedInstanceState);
          Log.d(TAG, "onCreate");
      }
    
      @Override
      public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
          Log.d(TAG, "onCreateView");
          View view = inflater.inflate(R.layout.right_fragment, container, false);
          return view;
      }
    
      @Override
      public void onActivityCreated(Bundle savedInstanceState) {
          super.onActivityCreated(savedInstanceState);
          Log.d(TAG, "onActivityCreated");
      }
    
      @Override
      public void onStart() {
          super.onStart();
          Log.d(TAG, "onStart");
      }
    
      @Override
      public void onResume() {
          super.onResume();
          Log.d(TAG, "onResume");
      }
    
      @Override
      public void onPause() {
          super.onPause();
          Log.d(TAG, "onPause");
      }
    
      @Override
      public void onStop() {
          super.onStop();
          Log.d(TAG, "onStop");
      }
    
      @Override
      public void onDestroyView() {
          super.onDestroyView();
          Log.d(TAG, "onDestroyView");
      }
    
      @Override
      public void onDestroy() {
          super.onDestroy();
          Log.d(TAG, "onDestroy");
      }
    
      @Override
      public void onDetach() {
          super.onDetach();
          Log.d(TAG, "onDetach");
      }
    

    }

    • 运行,RightFragment 第一次加载,查看 Logcat 中的日志,如下图

    log1

    • 点击 LeftFragment 中的 Button,AnotherRightFragment 替换 RightFragment 出现,查看日志,如下图

    log2

    • 按 Back 键,RightFragment 出现,查看日志,如下图

    log3

    • 再按 Back 键,程序退出,查看日志,如下图

    log4

    OK 了,我们对 Fragment 的生命周期已经了解的差不多,更深刻的理解以后用到的时候再说了。

    其它(Miscellaneous)

    尽管我试图在本文中尽量完整的进行描述,但受限于篇幅和我的个人水平,本文难免有所遗漏,欢迎在评论中指出。
    如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!

    关于作者(About Me)

    addict

    本文谢绝转载,如需转载需征得作者本人同意,谢谢。

  • 相关阅读:
    Vue项目碰到"‘webpack-dev-server’不是内部或外部命令,也不是可运行的程序或批处理文件"报错
    PowerDesigner最基础的使用方法入门学习
    Centos7 上安装mysql遇上的问题:mysql无法正常启动
    微信小程序的Web API接口设计及常见接口实现
    模型数据作渲染优化时遇到的问题
    vertex compression所遇到的问题
    depth and distance
    Linear or non-linear shadow maps?
    实施vertex compression所遇到的各种问题和解决办法
    【转】編譯Ogre1.9 IOS Dependencies及Ogre Source步驟及相關注意事項…
  • 原文地址:https://www.cnblogs.com/DebugLife/p/4358843.html
Copyright © 2020-2023  润新知