亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

EventBus詳解及簡單實例

標簽:
Android

EventBus引入

EventBus:Github


Event bus for Android and Java that simplifies communication between Activities, Fragments, Threads, Services, etc. Less code, better quality. 

翻译:适用于Android和Java的事件总线,简化了活动,碎片,线程,服务等之间的通信。减少代码,提高质量。


EventBus是Android和Java的发布/订阅事件总线。

https://img1.sycdn.imooc.com//5d397550000126d205010192.jpg

使用优点:

1、简化了组件之间的通信

      将事件发送者和接收者分离

      在活动,片段和后台线程中良好

      避免复杂且容易出错的依赖关系和生命周期问题

2、使代码更简单

3、很快、很小,具有交付线程,用户优先级等高级功能。


Event使用有三步

(1) 定义事件

(2) 准备订阅者:声明并注释您的订阅方法,可选择指定线程模式。注册和注销您的订阅者。例如,在Android上,活动和片段通常应根据其生命周期进行注册

(3) 发送event。


EventBus案例

实现效果:引入EnentBus,使用EnentBus一个消息的发送和接收,在MainActivity上写一个按钮和一个TextView,点击MainActivity上的按钮,跳转到另一个Activity,在另一个Activity上也有一个按钮,点击这一个按钮将消息写在MainActivity的TextView上。


先导入依赖: implementation 'de.greenrobot:eventbus:3.0.0-beta1'


定义一个EventBus的消息类,写出 构造方法和get方法

public class EventMessage {    private String message;    public EventMessage(String message) {        this.message = message;
    }    public String getMessage() {        return message;
    }    public void setMessage(String message) {        this.message = message;
    }
}



MainActivity:

public class MainActivity extends AppCompatActivity {    @BindView(R.id.activitybutton)
    Button activitybutton;    @BindView(R.id.textView)
    TextView textView;    @Override
    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        ButterKnife.bind(this);
        EventBus.getDefault().register(this);
    }    @Override
    protected void onDestroy() {        super.onDestroy();
        EventBus.getDefault().unregister(this);
    }    
    //接收消息
    @Subscribe(threadMode = ThreadMode.MainThread)    public void onEvent(EventMessage eventMessage){
        String message = eventMessage.getMessage();
        textView.setText(message);
    }    //按钮监听
    @OnClick(R.id.activitybutton)    public void onViewClicked() {
        Intent intent = new Intent(MainActivity.this,SecondActivity.class);
        startActivity(intent);
    }
}



SecondActivity:

public class SecondActivity extends AppCompatActivity {    @BindView(R.id.secondActivity)
    Button secondActivity;    @Override
    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
        ButterKnife.bind(this);
    }    @OnClick(R.id.secondActivity)    public void onViewClicked() {        new Thread(                new Runnable() {                    @Override
                    public void run() {                        //EventBus发送消息
                        EventBus.getDefault().post(new EventMessage("I want to send a message to MainActivity!我要向MainActivity发送消息"));
                    }
                }
        ).start();
    }
}



效果展示:

https://img1.sycdn.imooc.com//5d3975780001a93d00010001.jpg


點擊查看更多內容
TA 點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
  • 推薦
  • 評論
  • 收藏
  • 共同學習,寫下你的評論
感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號

舉報

0/150
提交
取消