美文网首页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