现在新技术层出不穷,我打算花费1个月时间整理Android最新常用技术栈及使用
,希望小伙伴们咱们一起进步
1、Arouter
这个是阿里最新的框架,其实现的目的页面、组件之间的跳转,代替了传统的intent等方式跳转,话不多说,直接上使用步骤
1)在module的build.gradle里面添加包引用
defaultConfig { javaCompileOptions { annotationProcessorOptions { //注解处理器需要的模块名,作为路径映射的前缀 arguments = [AROUTER_MODULE_NAME: project.getName()] } } }
implementation 'com.alibaba:arouter-api:1.4.1' annotationProcessor 'com.alibaba:arouter-compiler:1.2.2' //注解处理器,会将注解编译成Java类
2)在Application里面初始化路由,Router.init(this);
3)新建2个页面,Activitya,Activityb,由Activitya跳转到Activityb,并传值id="123";
Activitya里面点击事件添加如下代码
ARouter.getInstance().build("/test/demo").withString("id":"123").navigation();
Activityb添加如下注解
@Route(path = "/test/demo") public class Activitybextends AppCompatActivity {
@autowared(name="id")String id;//接收过来的值
}
2、LiveData
大部分Android应用会从网络或SQLite数据库存取数据,并根据数据更新界面。为了避免ANR,主线程中不能存取数据。而后台线程中无法更新界面。通常的做法是让后台线程将数据通过Handler传递给主线程。但是当界面较为复杂时,使用Handler这种方式变得非常复杂。为了简化界面更新的工作,Google在Jetpack中提供了LiveData组件。LiveData具有保证UI和状态一致、避免内存泄漏、避免手动管理生命周期等优点。
LiveData里面有2个赋值方法,一个是putValue(T value),另外一个是setValue(T value),主要区别前者可以在主线程和子线程赋值,后者在主线程赋值。
说下怎么使用,
一般情况下会自定义一个类,用来继承MutableLiveData(PS:为什么不用LiveData,主要原因是LiveData里面putValue方法是protected,外部不能访问,但是MutableLiveData是LiveData子类,重写了putValue(T value),其用public修饰,外部可以进行访问),重写onActive和onInactive方法,说下他们在activiy生命周期中什么时候开始执行,话不多说,如下图所示:
通过上面的图可以知道,
onActive方法在onStart之后和onResume之前执行,
onInactive方法在onPause之后和onStop之前执行。
@Override protected void onActive() { Log.e("MyLiveData:","call the onActive()"); super.onActive(); } @Override protected void onInactive() { Log.e("MyLiveData:","call the onInActive()"); super.onInactive(); }
LiveData一般需要observe通过观察者模式进行注册,当被观察者对象发生变化时,观察者也会随之变化。需要参数如下图所示,其中LifeCycleOwner可以用Activity/fragment引用,因为api26以后他们都会继承于LifecycleOwner。等会讲解ViewModel时,我这边会详细讲解observe使用
3、ViewModel
类旨在以注重生命周期的方式存储和管理界面相关的数据。ViewModel 类让数据可在发生屏幕旋转等配置更改后继续留存。下面来介绍下使用方法
自定义MyViewModel然后继承ViewModel,重写onCleared()方法,如下图所示:
上图中有2个自定义方法,getLiveData方法是为了创建LiveData对象,change方法主要作用是当被观察者对象发生变化的时候,会触发该方法,然后进行赋值,onCleared方法触发的条件是activity生命周期处于onStop之后会触发该方法。说这么多,ViewModel和liveData如何结合使用呢,创建2个fragment,分别为FragmentA和FragmentB,通过观察B,如果发生变化,通知A,如下图所示:
首先A和B都 new ViewModelProvider(getActivity()).get(MyViewModel.class);获取MyViewModel对象,当fragmentB里面textView进行点击时,通知A,B有变化了,然后A要发生变化。
好了,ARouter和LiveData和ViewModel到此告一段落