Android

Android 基础重点回顾

2019-10-31  本文已影响0人  LeoFranz

一、生命周期的跳转

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、设计思路

//在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

开发中最明显的改变就是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就能只负责生命周期的处理。
带来的优势:

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

上一篇 下一篇

猜你喜欢

热点阅读