美文网首页
王学岗EventBus

王学岗EventBus

作者: 王学岗 | 来源:发表于2018-11-07 16:38 被阅读0次

第一部分

EventBus的使用步骤:
1,添加jar包/依赖
2,注册 EventBus.getDefault().register(this);
3,解注册 EventBus.getDefault().unregister(this);
防止内存泄漏
4,构造发送消息类 EventBus.getDefault().post();
5,发布消息
6,接收消息
ThreadMode.MAIN; 表示这个方法在主线程中执行
ThreadMode.POSTING 表示该方法在后台执行,不能并发处理。必须等待该线程结束后才能处理其它线程事情
ThreadMode.ASYNC; 表示该方法在后台执行,可以异步兵法处理
ThreadMode.BACKGROUND; 表示该方法和消息发送方在同一个线程中执行

我们看下我们接收消息的页面


package com.example.eventbustest;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;

import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //1,注册广播
        EventBus.getDefault().register(this);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //2,解除注册
        EventBus.getDefault().unregister(this);
    }
     //5,接收消息
    //添加注释表示接收消息的方法,方法名字自定义,但是参数不能乱写,
    @Subscribe(threadMode = ThreadMode.MAIN)
    public void receiveMessage(MessageEvent messageEvent) {

        Log.i("zhang_xin","接收到的消息:"+messageEvent.getMessage());
        Log.i("zhang_xin","接收到消息的线程:"+Thread.currentThread().getName());

    }

}

我们创建发送消息的类

package com.example.eventbustest;
//3,创建发送消息的类,名字可以随便起
public class MessageEvent {
    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    private String message;
}

发送消息的代码

  //4,发送消息,消息的类型必须与@Subscribe注释的方法参数类型一样
        MessageEvent messageEvent=new MessageEvent();
        messageEvent.setMessage("工神黄月英");
        EventBus.getDefault().post(messageEvent);
        startActivity(new Intent(this,MainActivity.class));

看下打印输出结果。


11-07 16:13:50.156 28451-28451/com.example.eventbustest I/zhang_xin: 接收到的消息:工神黄月英
    接收到消息的线程:main

第二部分 粘性事件

使用步骤:
1,添加jar包/依赖
2,构造发送消息类
3,发布消息 EventBus.getDefault().postSticky(messageEvent);
4,接收消息
5,注册 EventBus.getDefault().register(this);
6,解注册 EventBus.getDefault().unregister(this);
防止内存泄漏
注意:粘性事件是先发送消息后注册

1,构造发送消息的类

package com.example.eventbustest;
//1,创建发送粘性消息的类,名字可以随便起
public class MessageEvent {
    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    private String message;
}

2,发送粘性事件


 //2,发送粘性事件
        MessageEvent messageEvent=new MessageEvent();
        messageEvent.setMessage("工神黄月英");
        EventBus.getDefault().postSticky(messageEvent);
        startActivity(new Intent(this,MainActivity.class));

后续的步骤


package com.example.eventbustest;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;

import org.greenrobot.eventbus.EventBus;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;

public class MainActivity extends AppCompatActivity {
    private boolean isRegister = false;

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

    @Override
    protected void onDestroy() {
        super.onDestroy();
        //5,解除注册
        EventBus.getDefault().removeAllStickyEvents();
        EventBus.getDefault().unregister(this);
    }

    //3,接收消息
    //添加注释表示接收消息的方法,方法名字自定义,但是参数不能乱写,
    @Subscribe(threadMode = ThreadMode.MAIN, sticky = true)
    public void receiveMessage(MessageEvent messageEvent) {

        Log.i("zhang_xin", "接收到的消息:" + messageEvent.getMessage());
        Log.i("zhang_xin", "接收到消息的线程:" + Thread.currentThread().getName());

    }

//按钮的点击事件
    public void register(View view) {
        if (isRegister) {
            return;
        } else {
            // 4,注册粘性事件,事件注册一次即可,若连续点击连续注册就会崩溃
            EventBus.getDefault().register(this);
            isRegister = true;
        }
    }
}

我们点击按钮,有如下输出


11-07 16:31:41.956 29616-29616/com.example.eventbustest I/zhang_xin: 接收到的消息:工神黄月英
    接收到消息的线程:main

相关文章

  • 王学岗EventBus

    第一部分 EventBus的使用步骤:1,添加jar包/依赖2,注册 EventBus.getDefault()....

  • 王学岗Banner的使用

    第一部分:Banner简介 Banner能实现循环播放多个广告图片和手动滑动循环等功能。因为原生ViewPager...

  • 乡村之眼小记者

    河南省信阳市平桥区王岗乡王岗小学的孩子们

  • 王学岗RelativeLayout.LayoutParams 的

    abl_scroll是一个AppBarLayout,这个方法的作用是根据它的滑动距离改变 tbl_three(是一...

  • 王学岗gson解析出错

    解析json一直报错,这个异常Expected ?but was ?,查看了下返回的数据格式,发现服务器返回的数据...

  • 财富流沙盘推演第59场

    今天这场沙盘,最有收获的是王岗。 推演中,王岗的婚姻真的回味。 我作为本场教练,请玩家方萍、青峰给王岗做媒,于是在...

  • 王借岗

    问山下一阿姨 :这山有路上吗? :有,不过这王借岗是个乱葬岗,你敢上去吗? :我就喜欢这种地方了。 上到山上竟然发...

  • 2018-03-26 activity,fragment app

    activity ,fragment ,app,传值基本都是通过 序列化 ,EventBus,RxBus, 最近学...

  • EventBus原理解析笔记以及案例实战(结合demo)

    笔记概述 EventBus简介 EventBus方法介绍 EventBus实际运用 EventBus简介 开源项目...

  • 巢湖风光14:放王岗汉墓博物馆

    放王岗汉墓博物馆,位于巢湖市建康路东端的放王岗上。 放王岗是一座南北狭长的低矮山岗,东邻旗山鼓山,西迎巢湖。据《史...

网友评论

      本文标题:王学岗EventBus

      本文链接:https://www.haomeiwen.com/subject/ospvxqtx.html