Android框架之EventBus及Butterknife

版权声明:转载请说明去处,文章仅供学习参考 https://blog.csdn.net/qq_38487155/article/details/81266848

一、EventBus:应用程序内各组件间、组件与后台线程间的通信。EventBus的核心在于:主线程发送消息、线程之间的通信,各组件传输数据,异步操作(开启子线程处理耗时任务),发送粘性事件等操作。

具体操作步骤:

1、需要在项目build.gradle里添加依赖 compile 'org.greenrobot:eventbus:3.0.0'
2、接收数据的类需要在onCreate里注册和在onDestroy里取消注册(注册后才能获得数据类(信息类))
3、自定义数据类
4、发送类通过EventBus.getDefault().post(new 自定义类)发送数据
5、接收类自定一个接收方法,参数需要为自定义类,还需要在上方添加线程类型@Subscribe(threadMode =ThreadMode.MAIN)
线程类型:
POSTING(默认):表示事件处理函数的线程跟发布事件的线程在同一个线程。
MAIN:表示事件处理函数的线程在主线程(UI)线程,因此在这里不能进行耗时操作。
BACKGROUND:表示事件处理函数的线程在后台线程,因此不能进行UI操作。如果发布事件的线程是主线程(UI线程),那么事件处理函数将会开启一个后台线程,如果果发布事件的线程是在后台线程,那么事件处理函数就使用该线程。
ASYNC:表示无论事件发布的线程是哪一个,事件处理函数始终会新建一个子线程运行,同样不能进行UI操作。
        //注册
        EventBus.getDefault().register( this );
        //取消注册
        EventBus.getDefault().unregister( this );
//自定义数据类
public class MyData {
    String name;
    int age;
    String address;

    public MyData(String name, int age, String address) {
        this.name = name;
        this.age = age;
        this.address = address;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getAddress() {
        return address;
    }

    public void setAddress(String address) {
        this.address = address;
    }
}
    //接收方法
    @Subscribe(threadMode = ThreadMode.MAIN)    //threadMode为线程类型
    public void receiver(MyData data){    //3.0版本后方法名可以自取
        //接收到数据后对数据类的操作,具体逻辑
        String name;
        int age;
        String address;
        name=data.getName();
        age=data.getAge();
        address=data.getAddress();
        textView.setText( name+"\n"+age+address );
    }
        //发送数据
        EventBus.getDefault().post(new MyData("张三",20,"\n地球"));

 二、Butterknife:注解作用,根据布局控件id生成相应的后台代码,可省略findViewById(),setOnClickListener(),ListView的点击@OnItemClick, CheckBox的@OnCheckedChanged也可以实现省略操作

具体操作步骤:

1、File->Settings->Plugins->butterknife Zelezny添加插件(添加过就不用再添加了)

2、使用前需要在app下的build.gradle的dependencies下添加:
compile 'com.jakewharton:butterknife:8.4.0'
annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0'

3、选中布局文件:按快捷键alt+insert,选中相应的控件和事件,生成后台代码

可以一次指定多个id,为多个View绑定一个事件处理方法: 

    //也可分离(spilt)处理@OnClick(R.id.button),在生成代码时选中spilt按钮即可
    @OnClick({R.id.button, R.id.checkBox, R.id.content})
    public void onViewClicked(View view) {
        switch (view.getId()) {
            case R.id.button:
                break;
            case R.id.checkBox:
                break;
            case R.id.content:
                break;
        }
    }

猜你喜欢

转载自blog.csdn.net/qq_38487155/article/details/81266848