标签: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