举例讲解Android应用开发中OTTO框架的基本使用

2019-12-10 19:05:20王冬梅

 

GlobalContext.getBusInstance().post(msg);

3. 接收者(Subscriber)
接收者可以是Activity,也可以是Fragment,还可以是Service。

我们以Fragment为例进行操作.

public class SMSControlFragment extends Fragment {

  Bus bus = GlobalContext.getBusInstance();

  @Override public void onAttach(Activity activity) {
    super.onAttach(activity);
    bus.register(this);
   }

  @Override public void onDetach() {
    super.onDetach();
    bus.unregister(this);
   }

  @Subscribe public void getMessage(SmsMessage s) {
    mTvNumber.setText(s.getOriginatingAddress());
    mTvMessage.setText(s.getMessageBody());
  }

}

订阅者是Fragment,发布者是SmsReceiver,消息内容是SmsMessage。
通过以上操作,一个使用OTTO的消息传递总线就完成了。


4.综合demo
下面的Demo, 仅为了让大家知道“事件”被产生了之后,post出来,所有订阅了该事件的类都会接到该事件,接受的先后顺序,不由我们控制!

public class MyActivity extends ActionBarActivity {

 @Override
 protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_my);
  findViewById(R.id.button_change).setOnClickListener(new View.OnClickListener() {
   @Override
   public void onClick(View view) {
    BusProvider.getBusInstance().post(new DataChangedEvent("this is changed String"));//发布事件
   }
  });
 }

 @Override
 protected void onResume() {
  super.onResume();
  BusProvider.getBusInstance().register(this);//注册
  
 }

 @Override
 protected void onPause() {
  super.onPause();
  BusProvider.getBusInstance().unregister(this);//注销
 }

 @Subscribe  //订阅事件DataChangedEvent
 public void sayGoodOnEvent(DataChangedEvent event){
  Log.e("event", "good");
 }

 @Subscribe //订阅事件
 public void sayBadOnEvent(DataChangedEvent event){
  Log.e("event", "bad");
 }

 @Produce //产生事件
 public DataChangedEvent produceDataChangedEvent(){
  return new DataChangedEvent("this is changed String");
 }

}