国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

Rxbus實現事件總線

2019-11-06 10:04:47
字體:
來源:轉載
供稿:網友

   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就實現啦!


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 连城县| 绵阳市| 东城区| 庆元县| 伊宁市| 丹东市| 黑河市| 邵东县| 古交市| 南溪县| 枝江市| 洛隆县| 榕江县| 杂多县| 黎川县| 油尖旺区| 阳曲县| 乡城县| 玉田县| 昌黎县| 准格尔旗| 阜宁县| 柳州市| 溧阳市| 南宁市| 息烽县| 都江堰市| 平利县| 西安市| 敦化市| 团风县| 镇巴县| 呼图壁县| 凤翔县| 内黄县| 沙田区| 互助| 庐江县| 建宁县| 如皋市| 大化|