美文网首页Android
Android 基础重点回顾

Android 基础重点回顾

作者: LeoFranz | 来源:发表于2019-10-31 15:39 被阅读0次
    • 生命周期的跳转
    • 应用调试
    • fragment
    • RecyclerView
    • ConstrainLayout
    • 双版面主从用户界面
    • MVVM MVP

    一、生命周期的跳转

    https://www.jianshu.com/p/d7070d4827ba
    https://www.jianshu.com/p/fb44584daee3
    activity 跳转的顺序是先pause当前,启动新界面再把之前的stop掉;
    这样设计的目的是pause已经能释放大量资源,为了保证界面切换的流畅度
    onnewIntent启动时机是启动singleTop模式下的activity,或者给intent中添加一个flag后,或者activity在栈顶再启动它;
    被启动activity在栈顶的启动顺序是pause-onnewintent-onresume
    被启动activity在栈中的启动顺序是onnewIntent-onrestart-onstart-onresume

    三、fragment
    fragment生命周期是activity管理的,操作系统不关心,所以fragment生命周期方法都是公共方法,activity要调用他们
    1、生命周期如下:

    onAttach--onCreate--onCreateView--onActivityCreated--onStart--onResume
    --onPause--onStop--onDestoryView--onDestroy--onDetach
    

    其中onAttach,onCreate,onCreagteView全部在setContentView方法中调用
    2、fragment的使用
    除了在xml中硬性添加fragment,
    唯一灵活的方法就是使用代码添加,就是通过activity中的fragmentManager添管理fragment,它会调用所管理的fragment的生命周期方法。
    首先为fragment添加一个视图容器,该容器可以用于托管其他的fragment,容器id标识需要添加的fragment,在fragmentManager管理的fragment队列中,不同的fragment就是被容器id标识并保存起来的,此外,在设备旋转或回收内存时,fragmentManager能够保存当前队列,并在activity重建时恢复。
    3、设计思路

    • 如果有比较多的细小组件需要复用,比较好的方法就是使用自定义view
    • 一个屏幕最多使用2-3个fragment
      4、fragment之间的通信
      有几种方法:
    • 通过fragment获取activity实例,然后通过findFragmentbyId方法获取其他fragment实例进行通信
    • 通过fragmentintent-->Activity-->fragmentintent
      对端fragment通过getActivity获取托管activity的信息,缺陷就是拓展性差,fragment必须知道托管activity的实现细节。
    • fragment argument
      通过创建fragment之后,添加给activity之前,给fragment添加参数为Bundle的argument,然后在fragment的生命周期方法中获取argument
    //在activity中调用fragment的生成方法,并添加bundle
    public static CrimeFragment newInstance(UUID crimeId) {
            Bundle args = new Bundle();
            args.putSerializable(ARG_CRIME_ID, crimeId);
    
            CrimeFragment fragment = new CrimeFragment();
            fragment.setArguments(args);
            return fragment;
        }
    
    //在fragment的生命周期方法中获取bundle
    @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            UUID crimeId = (UUID) getArguments().getSerializable(ARG_CRIME_ID);
            mCrime = CrimeLab.get(getActivity()).getCrime(crimeId);
            mPhotoFile = CrimeLab.get(getActivity()).getPhotoFile(mCrime);
        }
    

    这样做的好处在于fragment可以作为一个独立的组件使用,无需知道activity的实现细节。而activity知道fragment的细节是合理的。
    另一个好处就是fragment的argument能够在fragment因为设备旋转或者内存回收时候保存数据,如果使用其他方式比如实例变量保存数据,就容易丢失。虽然fragment中也有OnSavedInstanceState(Bundle)方法,但是一般argument更方便。
    参考:
    https://www.jianshu.com/p/7ae890863307

    四、RecyclerView
    参考:
    https://www.jianshu.com/p/0ca3944a8acd

    五、ConstrainLayout
    是伴随AS2.2推出的一个新布局,最大的特点就是十分适合用可视化的方式编辑,它是用约束的方式排版组件,能够有效的解决布局嵌套过多的问题。
    一个控件上下左右方向各有一个约束点,通过往约束点添加约束,控件的位置就能确定
    约束能相对于父控件添加,也可以相对于其他控件进行添加
    此外在Inspector中横纵的两条轴能改变既定约束下的控件位置
    any size是用于填充满当前控件的约束规则,对比于用于填充满当前控件的父布局的match parent
    guideLines能够作为水平/垂直对齐的标尺。
    通过上述的属性,constrainLayout能够较为轻松的实现比较复杂的UI,相对于RelativeLayout更加强大。

    六、双版面主从用户界面
    https://www.jianshu.com/p/3ec5d7848e31

    七、MVVM、MVP、MVC
    MVVM:View--(dataBinding)--ViewModel--Model

    • View只负责监听数据变化并更新UI,不应有任何数据逻辑操作;
    • ViewModel负责业务逻辑处理并和View层传递数据变化信息,他们之间通过dataBinding双向通信,ViewModel没有持有view的耦合;
    • Model定义实体类,以及获取业务数据模型,比如通过数据库或者网络来操作数据等。
      有那么几个优势:
      1、轻耦合,view和viewmodel之间没有耦合,viewmodel不会持有view的引用
      2、异步线程更新UI,UI更新不再需要切换到主线程,dataBinding会自动完成
      3、数据驱动,UI 的展现是依赖于数据的,数据的变化会自然的引发 UI 的变化,而 UI 的改变也会使数据 Model 进行对应的更新。
      有这三大优势带来的额外福利就是协作和单元测试方便

    开发中最明显的改变就是dataBinding让程序员不用再写findViewById()、setText()、setOnClickListener() 这类没有营养的胶水代码。

    参考:
    https://www.jianshu.com/p/153ba1adf4cc

    MVP模式:
    传统的MVC模式中Activity承载了太多View好Controller的功能,耦合太大。
    MVP中将activity解放,利用View--Presenter--Model的架构,让业务逻辑集中到Presenter中处理,View层集中处理视图逻辑,View和Presenter层相互引用,这样activity就能只负责生命周期的处理。
    带来的优势:

    • 分离了视图逻辑和业务逻辑,降低了耦合
    • Activity只处理生命周期的任务,代码变得更加简洁
    • 视图逻辑和业务逻辑分别抽象到了View和Presenter的接口中去,提高代码的可阅读性
    • Presenter被抽象成接口,可以有多种具体的实现,所以方便进行单元测试

    参考:
    https://www.jianshu.com/p/babe8325f751

    相关文章

      网友评论

        本文标题:Android 基础重点回顾

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