agera是什么
agera的基本用法1
agera的基本用法2
agera在实际Android开发中使用
agera是什么
agera is a set of classes and interfaces to help wirte functional,asynchronous and reactive applications for Android.Requires Android SDK version 9 or higher.
翻译下:agera是一个能帮助Android开发者更好的开发函数式,异步和响应式程序的框架,要求Android的SDK版本在9以上。
另外:它和RxJava一样,是基于观察者模式开发的。
agera的基本用法1
1、首先定义被观察者
public class MyData extends BaseObservable {
private String data;//-------->被观察者,数据源
public String getData() {
return data;
}
public void setData(String data) {
this.data = data;
dispatchUpdate();//------->data变化后调用此方法通知所有观察者
}
}
2、定义观察者—这里我们把Activity作为观察者
public class MainActivity3 extends EActivity implements Updatable{
private EditText text1;
private TextView text2;
private MyData myData;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_activity3);
text1 = (EditText) findViewById(R.id.text1);
text2 = (TextView) findViewById(R.id.text2);
myData = new MyData();
text1.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
}
@Override
public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
if(charSequence!=null){
myData.setData(charSequence.toString());
}else{
myData.setData("");
}
}
@Override
public void afterTextChanged(Editable editable) {
}
});
}
@Override
protected void onResume() {
super.onResume();
myData.addUpdatable(this);
}
@Override
protected void onPause() {
super.onPause();
myData.removeUpdatable(this);
}
@Override
public void update() {
text2.setText(myData.getData());
}
}
在EditText监听事件中,更改被观察者(数据源 MyData),数据源改变后会通知所有观察者,在这里Activity作为观察者,执行Activity的update方法。
agera的基本用法2
上面的代码中Observable和Updatable之间的通信,完全没有数据的存在,也就是说当Observable想要传递一些数据给Updatable的时候,通过这样的方式是没办法实现的。这也是Google故意而为之,他们的想法就是要让数据从Observable和Updatable中剥离。
从而达到他们所期望的:Push event,pull data model,不同于RxJava:Push data model。
但是:agera不是为观察者模式服务!!!!
1、首先了解以下几个概念:
(1) Observable:agera中的被观察者,用于在合适的时机去通知观察者进行更新。
(2) Updatable:agera中的观察者,用于观察Observable。
(3) Supplier:agera中提供数据的接口,通过范型指定数据类型,通过get()方法获取数据。
(4) Repository:继承自Observable、Supplier。称作:提供数据的被观察者。
2、结合以下代码看一下:
public class MainActivity3 extends EActivity implements Updatable {
private Button btn1;
private TextView text2;
private Supplier<String> supplier = new Supplier<String>() {
@NonNull
@Override
public String get() {
return btn1.getText().toString();
}
};
private Repository<String> repository = Repositories.repositoryWithInitialValue("a")
.observe()
.onUpdatesPerLoop()
.thenGetFrom(supplier)
.compile();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main_activity3);
btn1 = (Button) findViewById(R.id.button1);
text2 = (TextView) findViewById(R.id.text2);
btn1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
repository.addUpdatable(MainActivity3.this);
}
});
}
@Override
public void update() {
text2.setText(supplier.get());
}
}
其中,当点击btn1时,将此事件通知到观察者:MainActivity,并执行其中update方法。
agera在实际Android开发中使用
请查看以下代码即可了解:
public class MainActivity extends AppCompatActivity implements Updatable{
private Button observableBtn;
private TextView show;
private ClickObservable clickObservable;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
observableBtn = (Button)findViewById(R.id.observable_btn);
show = (TextView)findViewById(R.id.show);
clickObservable = new ClickObservable();
clickObservable.addUpdatable(this);
observableBtn.setOnClickListener(clickObservable);
}
@Override
public void update() {
show.setText("update!!");
}
public static class ClickObservable extends BaseObservable implements View.OnClickListener{
@Override
public void onClick(View v) {
dispatchUpdate();
}
}
}
其他难点:
整个Repository数据处理流的过程
操作符 Function Attempt Result Receiver Reservoir