美文网首页
Activity与Fragment知识点总结

Activity与Fragment知识点总结

作者: Rangethan | 来源:发表于2017-01-03 10:41 被阅读101次

    参考

    1.Fragment
    http://yifeng.studio/2016/12/15/android-fragment-attentions/?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io

    看图识�两者的生命周期

    学生命周期的时候最先看的就是官方的生命周期图。
    其中,
    Activity的:https://developer.android.com/reference/android/app/Activity.html
    Fragment的:https://developer.android.com/guide/components/fragments.html
    但是,高手在民间。
    github的:https://github.com/xxv/android-lifecycle
    这张生命周期图比官方的不知道高到哪里去了。

    Activity_Fragment_lifecycle.jpg

    在Fragment的不同生命周期回调方法中调用Activity对象的finish()方法

    1.在Activity的生命周期回调方法中调用
    注意,该Activity中添加了一个Fragment。

    • 在onCreate()中调用


      在Activity的onCreate()中调用.png
    • 在onStart()中调用


      在Activity的onStart()中调用.png
    • 在onResume()中调用


      在Activity的onResume()中调用.png

    2.在Fragment的生命周期回调方法中调用

    • 在onAttach(), onCreate(), onCreateView(), onViewCreated(), onActivityCreated(), onStart()中调用


      在Fragment的onAttach(), onCreate(), onCreateView(), onViewCreated(), onActivityCreated(), onStart()中调用.png
    • 在onResume()中调用


      在Fragment的onResume()中调用.png

    以上,需要特别引起重视的是,在Fragment的生命周期回调方法中调用Activity对象的finish()方法。

    • 在onAttach(), onCreate(), onCreateView(), onViewCreated(), onActivityCreated(), onStart()任意一个回调中调用finish(),所经历的生命周期都是一样的。
      比如,在Fragment的onCreate()中通过getActivity().getIntent()获取Intent对象,然后对Intent对象中的Data进行解析。
      like this:
    @Override
    public void onCreate(@Nullable Bundle savedInstanceState) {
             super.onCreate(savedInstanceState);   
             Intent intent = getActivity().getIntent();    
             parseUriData(intent);
    }
    private void parseUriData(Intent intent) {    
            if (null == intent || null == intent.getData()) {        
                    getActivity().finish();        
                    return;   
            }    
            Uri data = intent.getData();    
            String voucher = data.getQueryParameter(ARG_VOUCHER);    
            if (!TextUtils.isEmpty(voucher) && !TextUtils.equals("null", voucher)) {
                    this.voucher = Consts.GSON.fromJson(voucher, Voucher.class);    
            }
    }
    

    以上代码,在Data为空的时候,会执行Activity对象的finish()方法,然后return。但生命周期还会继续往下走。
    onCreateView() --> onViewCreated() --> onActivityCreated() --> onStart()...
    所以,在之后的回调方法中,一定要做好判断。

    Fragment的懒加载

    http://yxcoding.net/2016/07/13/1468374159777/
    http://www.jianshu.com/p/52daa5ff5130

    相关文章

      网友评论

          本文标题:Activity与Fragment知识点总结

          本文链接:https://www.haomeiwen.com/subject/fxwgvttx.html