EventBus和Otto第三方框架

EventBus

一.EventBus介绍:

EventBus能够简化各组件间的通信,让我们的代码书写变得简单,能有效的分离事件发送方和接收方(也就是解耦的意思)。

二、EventBus三大要素

Event 事件。它可以是任意类型。
Subscriber 事件订阅者。
Publisher 事件的发布者。我们可以在任意线程里发布事件,一般情况下,使用EventBus.getDefault()就可以得到一个EventBus对象,然后再调用post(Object)方法即可。

三、代码实现

package com.example.day11_eventbus;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.EventBusBuilder;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;

/**
 * 1.添加依赖:'org.greenrobot:eventbus:3.1.1'
 * 2.发送者:发布者
 * postSticky(Object)
 * 3.接收者:订阅者
 *  注册 onCreate
 *  解除注册 onDestory
 *  声明订阅者进行接受消息 @SubScribe
 *
 *
 * **/
public class MainActivity extends AppCompatActivity {
Button button;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = findViewById(R.id.buyyon);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                EventBus.getDefault().post(new DataEvent("王震",17,"被人甩了","2000-08-27"));
            }
        });
        //TODO 1:注册
        EventBus.getDefault().register(this);
    }
    //TODO 3:使用注解声明
    //注意 方法必须是 public void   指定线程模型 4种
    //ThreadMode.MAIN 主线程
    //ThreadMode.ASYNC 子线程
    //ThreadMode.BACKGROUND 后台线程
    //ThreadMode.POSTING 发布方和接受方在同一个线程种
    @Subscribe(threadMode = ThreadMode.MAIN)
    public  void revicer(DataEvent data){
        Toast.makeText(this, data.getName()+data.getAge()+data.getData()+data.getBrithy(), Toast.LENGTH_SHORT).show();
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        //TODO 2:解除注册
        EventBus.getDefault().unregister(this);
    }
}

Otto

package com.example.day11_otto;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import com.squareup.otto.Subscribe;

public class MainActivity extends AppCompatActivity {
    /**
     * 1.添加依赖:'org.greenrobot:eventbus:3.1.1'
     * 2.发送者:发布者
     * postSticky(Object)
     * 3.接收者:订阅者
     *  注册 onCreate
     *  解除注册 onDestory
     *  声明订阅者进行接受消息 @SubScribe
     *
     * 4.otto和eventbus的区别
     *     1.otto没有bus
     *     2.otto不支持粘性广播
     *     3.otto不支持线程模型
     * **/
    Button button;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button = findViewById(R.id.buyyon);
        button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                OttoBus.getDefalut().post(new DataEvent("王震",17,"被人甩了","2000-08-27"));
            }
        });
        //TODO 1:注册
        OttoBus.getDefalut().register(this);
    }
    //TODO 3:使用注解声明
    @Subscribe
    public  void revicer(DataEvent data){
        Toast.makeText(this, data.getName()+data.getAge()+data.getData()+data.getBrithy(), Toast.LENGTH_SHORT).show();
    }
    @Override
    protected void onDestroy() {
        super.onDestroy();
        //TODO 2:解除注册
        OttoBus.getDefalut().unregister(this);
    }
}

自定义Bus

package com.example.day11_otto;

import com.squareup.otto.Bus;
//饿汉单例
public class OttoBus extends Bus {
        //构造私有化
        private OttoBus(){}
        //自己实例化
        private static OttoBus ottoBus=new OttoBus();
        //提供公开方法
        public static OttoBus getDefalut(){
            return ottoBus;
        }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MX_XXS

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值