EventBus(一) 简单使用,不使用反射,使用注解处理器

送分小仙女□ 提交于 2019-12-30 22:50:06

导入依赖

 // 依赖第三方库:EventBus
    implementation 'org.greenrobot:eventbus:3.1.1'
    annotationProcessor 'org.greenrobot:eventbus-annotation-processor:3.1.1'

给EventBus注解处理器传参

 // 给注解处理器传参
        javaCompileOptions {
            annotationProcessorOptions {
                arguments = [ eventBusIndex : 'com.netease.eventbus.demo.MyEventBusIndex' ]
            }
        }

Application中初始化

/**
 * http://greenrobot.org/eventbus/documentation/subscriber-index/
 */
public class BaseApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();
        EventBus.builder().addIndex(new MyEventBusIndex()).installDefaultEventBus();
    }
}

注册

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        EventBus.getDefault().register(this);
    }

    // 订阅方法
    @Subscribe
    public void event(String string) {
        Log.e("event >>> ", string);
    }

    // 测试优先级
    @Subscribe(priority = 10, sticky = true)
    public void event2(String string) {
        Log.e("event2 >>> ", string);
    }

    // 点击事件
    public void jump(View view) {
        startActivity(new Intent(this, SecondActivity.class));
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (EventBus.getDefault().isRegistered(this)) {
            EventBus.getDefault().unregister(this);
        }
    }
}

发布事件

public class SecondActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
    }

    // 点击事件
    public void post(View view) {
        // 发布事件
        // EventBus.getDefault().post("simon");
    }

}

粘性事件发送

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }


    // 点击事件
    public void jump(View view) {
        EventBus.getDefault().postSticky("sticky");
        startActivity(new Intent(this, SecondActivity.class));
    }

}

接收粘性事件

/**
 * 未初始化 / 延时消费
 */
public class SecondActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_second);
    }

    // 点击事件
    public void post(View view) {
        // 注册
        EventBus.getDefault().register(this);
    }

    // 测试粘性事件
    @Subscribe(sticky = true)
    public void sticky(String string) {
        Log.e("sticky >>> ", string);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        if (EventBus.getDefault().isRegistered(this)) {
            EventBus.getDefault().unregister(this);
        }
    }
}

以上就是EventBus3.0的正确使用姿势,因为2.0的版本是用的反射实现的,所以如果按照官网的方式,使用的是反射的方式,如果要使用注解处理器的方式,可以通过上述的方式。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!