1.初识
最近项目内有用到这个,故特地来学学,并且记录下来。有错误请直接指出,感谢。
AAC是啥
它是在Google 2017 I/O大会 提出来的一个概念,即Android Architecture Components(简称AAC),它是一套新的MVVM架构组件,使App的架构更加健壮。
图示
它的构成(本图来自:http://www.cnblogs.com/zqlxtt/p/6887938.html,侵删):
构成
从上图里可以看到几个比较重要的概念:
- LifeCycle
生命周期管理,把原先Android生命周期的中的代码抽取出来,如将原先需要在onStart()等生命周期中执行的代码分离到Activity或者Fragment之外。
- ViewModel
用于实现架构中的ViewModel,同时是与Lifecycle绑定的,使用者无需担心生命周期。可以在多个Fragment之间共享数据,比如旋转屏幕后Activity会重新create,这时候使用ViewModel还是之前的数据,不需要再次请求网络数据。
- LiveData
一个数据持有类,持有数据并且这个数据可以被观察被监听,和其他Observer不同的是,它是和Lifecycle是绑定的,在生命周期内使用有效,减少内存泄露和引用问题。
- Room
谷歌推出的一个Sqlite ORM库,不过使用起来还不错,使用注解,极大简化数据库的操作,有点类似Retrofit的风格。
先记住有这么几个重要的东西即可,有问题先存疑,后面在编码的过程中理解。
多说无益,拿起梭子先找下手感。后面将通过俩个示例来更加深入的了解一下它。
2.依赖
在项目的build.gradle
allprojects {
repositories {
maven { url 'https://dl.google.com/dl/android/maven2' }
jcenter()
}
}
官方提供的是这个,但会被墙。
allprojects {
repositories {
jcenter()
maven { url 'https://maven.google.com' } //添加此行
}
}
在app/build.gradle中添加以下依赖:
//For Lifecycles, LiveData, and ViewModel
compile "android.arch.lifecycle:runtime:1.0.0-alpha1"
compile "android.arch.lifecycle:extensions:1.0.0-alpha1"
annotationProcessor "android.arch.lifecycle:compiler:1.0.0-alpha1"
//For Room
compile "android.arch.persistence.room:runtime:1.0.0-alpha1"
annotationProcessor "android.arch.persistence.room:compiler:1.0.0-alpha1"
3.LifeCycle是什么?
这里通过一个示例:自定义View结合LifeCycle使用,来学习和了解。下面直接贴出代码。
MyTv.class
package proxy.zj.com.lifecycledemo;
import android.annotation.SuppressLint;
import android.arch.lifecycle.Lifecycle;
import android.arch.lifecycle.LifecycleObserver;
import android.arch.lifecycle.OnLifecycleEvent;
import android.content.Context;
import android.graphics.Canvas;
import android.support.annotation.Nullable;
import android.util.AttributeSet;
import android.util.Log;
import android.widget.TextView;
@SuppressLint("AppCompatCustomView")
public class MyTv extends TextView implements LifecycleObserver {
private String TAG = "MyTv";
private boolean lifeCycleEnable;
private Lifecycle lifecycle;
public boolean isLifeCycleEnable() {
return lifeCycleEnable;
}
public void setLifeCycleEnable(boolean lifeCycleEnable) {
this.lifeCycleEnable = lifeCycleEnable;
}
public Lifecycle getLifecycle() {
return lifecycle;
}
public void setLifecycle(Lifecycle lifecycle) {
this.lifecycle = lifecycle;
}
public MyTv(Context context) {
super(context);
}
public MyTv(Context context, @Nullable AttributeSet attrs) {
super(context, attrs);
}
public MyTv(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
}
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
// ****************** lifeCycle ******************
@OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
public void create() {
if (lifeCycleEnable) {
String text = System.currentTimeMillis() + "-creat\n";
Log.e(TAG, text);
this.setText(text);
}
}
@OnLifecycleEvent(Lifecycle.Event.ON_START)
public void start() {
if (lifeCycleEnable) {
String text = System.currentTimeMillis() + "-start\n";
Log.e(TAG, text);
this.setText(text);
}
}
@OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
public void resume() {
if (lifeCycleEnable) {
String text = System.currentTimeMillis() + "-resume\n";
Log.e(TAG, text);
this.setText(text);
}
}
@OnLifecycleEvent(Lifecycle.Event.ON_PAUSE)
public