RXjava在2016年大放異彩,如果大家已經在項目中使用了Rxjava,可以嘗試用Rxbus來替代Eventbus(Rxbus也是基于觀察者模式),這樣就不需要再引入其他的依賴庫了!
話不多說,我們直接上代碼:
public class RxBus { PRivate static volatile RxBus mInstance; private final Subject bus; public RxBus() { bus = new SerializedSubject<>(PublishSubject.create()); } /** * 單例模式RxBus * * @return */ public static RxBus getInstance() { RxBus rxBus2 = mInstance; if (mInstance == null) { synchronized (RxBus.class) { rxBus2 = mInstance; if (mInstance == null) { rxBus2 = new RxBus(); mInstance = rxBus2; } } } return rxBus2; } /** * 發送消息 * * @param object */ public void post(Object object) {bus.onNext(object);} /** * 接收消息 * * @param eventType * @param <T> * @return */ public <T> Observable<T> toObserverable(Class<T> eventType) { return bus.ofType(eventType); }}定義一個單例的Rxbus類,確保線程的安全。public class MainActivity extends AppCompatActivity { private TextView tv; private Subscription rxSbscription; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv = (TextView) findViewById(R.id.tv); rxSbscription = RxBus.getInstance().toObserverable(StudentEvent.class) .subscribe(new Action1<StudentEvent>() { @Override public void call(StudentEvent studentEvent) { tv.setText("id:" + studentEvent.getId() + " name:" + studentEvent.getName()); } }); tv.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent it=new Intent(); it.setClass(MainActivity.this,MainActivity2.class); startActivity(it); } }); } @Override protected void onDestroy() { if (!rxSbscription.isUnsubscribed()){ rxSbscription.unsubscribe(); } super.onDestroy(); }}在主Activity里面進行訂閱,這里需要注意的是在Activity銷毀的時候記得解綁哦!不然發生內存泄漏,這個鍋我可不背!public class MainActivity2 extends AppCompatActivity { private TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv = (TextView) findViewById(R.id.tv); RxBus.getInstance().post(new StudentEvent("123","小明")); }}在事件產生的源頭執行post方法,Rxbus接收到消息以后會自動的把消息轉發給訂閱者!到這里一個簡單的Rxbus就實現啦!
新聞熱點
疑難解答