转:http://android.jobbole.com/82217/
1、Activity与Activity间的传值是通过Intent
,值回调是通过startActivityForResult()
2、Activity与Fragment间的传值是通过setArguments
,值回调是通过实现onAttach()
的Interface方式
3、而Fragment与Fragment间的交互则应该是通过它们关联的Activity作为中间键来交互
4、包括Activity与Service的交互,可能众多同学会采用Binder机制来处理,而其实Binder机制本质也是通过接口回调方式来进行值回调的
5、或者在更复杂的应用场景下,比如:ActivityA跳转到ActivityB,ActivityB跳转到ActivityC,此时需要从ActivityC中获取到用户的操作数据返回到ActivityA和ActivityB中显示,或者在Activity中有多个Fragment,其中一个Fragment里的数据变化需要同步更新其它Fragment的数据变化,这时候如果使用Interface的方式进行它们间的交互则比较复杂,耦合度也高 所以,针对上面这些问题,大多数在处理值交互的问题上类之间都是耦合在一起的,而Otto事件总线框架就是降低各个类间的耦合度的。(方便解决Activity与Activity,Fragment,Service数据的传递与交互中所遇到的复杂问题)
使用otto框架要添加依赖
compile 'com.squareup:otto:1.3.8'
建立个实体类用来传递各数据(这里只传String)public class BusData { public String messege; public BusData(String messege) { this.messege = messege; } public String getMessege() { return messege; } public void setMessege(String messege) { this.messege = messege; } }创建个 单例对象public class OttoBus extends Bus { private volatile static OttoBus bus; public OttoBus() { } public static OttoBus getInstance(){ if (bus==null){ synchronized (OttoBus.class){ if (bus==null){ bus =new OttoBus(); } } } return bus; } }MainActivity 类:public class MainActivity extends AppCompatActivity implements View.OnClickListener { private Button mBt_jump; private TextView mTv_messge; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); OttoBus.getInstance().register(this);//注册订阅事件 mBt_jump = (Button) findViewById(R.id.bt_jump); mTv_messge=(TextView) findViewById(R.id.tv_messge); mBt_jump.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()){ case R.id.bt_jump: Intent intent=new Intent(MainActivity.this,ThereActivity.class); startActivity(intent); break; } } @Override protected void onDestroy() { super.onDestroy(); OttoBus.getInstance().unregister(this);//取消订阅事件 } @Subscribe //接收处理事件 public void setContent(BusData data){ Log.i("BusData","BusData==="+data.getMessege()); mTv_messge.setText(data.getMessege()); } }跳转ThereActivity类
public class ThereActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.thereactivity); findViewById(R.id.bt_back).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { OttoBus.getInstance().post(new BusData("数据送出在第一页接收到"));//发出信息数据 finish(); } }); } }