标签:com 应用 tracking prot rac 模式 传递 接收 使用
这两天对Otto进行了一个简单的调研,发现官网特别简单差点儿没东西,github上给的sample也不是非常好。网上的技术博客也差点儿千篇一律,我就把自己的心得体会写下来吧,如有缘者看见望其少走弯路。
大家都知道这是一个公布者/订阅者模式,也都知道@Produce使用来注冊一个须要公布的方法,可是我在实际应用中却从来没用到过@Produce,仅仅须要定义一个事件,在须要公布的是好post一下这个事件,然后在须要接收这个消息的Activity或Fragment中@Subscribe一下即可了。详细就三步。
第一步,构造一个event事件。须要传递的參数放在构造方法中。比如:
public class TextChangeEvent {
public final String s;
public TextChangeEvent(String s) {
this.s = s;
}
@Override
public String toString() {
return this.s;
}
}
第二步,在须要公布消息的地方用post公布,post的參数是一个event的实例。new一个出来就OK了:
findViewById(R.id.btn1).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
BusProvider.getInstance().post(new TextChangeEvent("注冊呢"));
AnotherActivity.this.finish();
}
});
第三步,在须要接收消息的界面用@Subscribe接收一下就能够了:
@Subscribe
public void onTextChanged(TextChangeEvent event) {
text.setText(event.toString());
Log.v("cat", event.toString());
}到这里就完毕了一个从消息公布。在总线中传递,再到须要接收的地方被接收处理的过程,当中有几点须要注意的:
1 、Otto推荐使用单例模式。即仅仅有一个Bus实例,那么我们就构造一个BusProvider:
import com.squareup.otto.Bus;
public class BusProvider {
private static final Bus BUS = new Bus();
public static Bus getInstance() {
return BUS;
}
private BusProvider() {
}
}
@Override
protected void onDestroy() {
super.onDestroy();
BusProvider.getInstance().unregister(this);
}
标签:com 应用 tracking prot rac 模式 传递 接收 使用
原文地址:http://www.cnblogs.com/clnchanpin/p/7072561.html