Agera是来自Google新推出的一款响应式框架。其实在Android开发中,大家常常会面对非UI线程更新UI的问题。这个问题在百度上解答已经非常多了。其根本就是使用Handler,传递消息。但是Handler这个类的使用,不那么美观,结构不好看,还容易内存泄露。因此,各种框架对其进行了封装。从原生框架中的AsyncTask到后面EventBus,到如今的Agera都是对Handler传递消息这件事,进行了各种封装,让它更加的优雅,刷新UI界面更加方便。
Agera其实就是个观察者模式。分为两部分,数据源和观察者。
下面我们就来看看一个简单的例子
public class BaseBean extends BaseObservable {
private String content ;
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
update();
}
public void update(){
new Thread(new Runnable() {
@Override
public void run() {
content += " 我在发生改变";
dispatchUpdate();
}
}).start();
}
}
public class AgeraActivity extends Activity implements Updatable {
private BaseBean baseBean;
private EditText editText;
private TextView textView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.agera);
textView = (TextView) findViewById(R.id.tv_test1);
baseBean = new BaseBean();
editText = (EditText) findViewById(R.id.edite_text);
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (baseBean != null) {
baseBean.setContent(s.toString());
}
}
@Override
public void afterTextChanged(Editable s) {
}
});
}
@Override
protected void onResume() {
super.onResume();
baseBean.addUpdatable(this);
}
@Override
protected void onPause() {
super.onPause();
baseBean.removeUpdatable(this);
}
@Override
public void update() {
textView.setText(baseBean.getContent());
}
}