zoukankan      html  css  js  c++  java
  • 在Android studio环境下使用EventBus

    EventBus是一个订阅/发布消息总线,实现在应用程序里面,组件之间,线程之间的通信。因为event是任意的类型,所以这个使用起来非常方便。

    eventbus中的角色:

    event:当然就是事件啦

    subscriber:事件的订阅者,先注册,接收特定的对象,并通过onEventXXX()来回收处理事件。

    Publisher:事件的发布者,通过post发布信息。

    处理过程主要分为5步:

    1.定义一个事件(event)

    2.注册一个订阅者

    3.发布一个事件

    4.接收处理一个事件

    5.注销一个订阅者

    四种处理事件的方式onEventXXXX

    onEvent函数一共有四种,前面的例子只用到一个onEvent。

    函数名含义ThreadMode
    onEvent 事件处理在事件发送的那个线程执行 PostThread
    onEventMainThread 事件在主线程-UI线程执行 MainThread
    onEventBackgroundThread 事件在一个后台线程执行(就一个后台线程) BackgroundThread
    onEventAsync 事件会单独启动一个线程执行(每个事件都会启动一个线程) Async

    其中前三个事件处理方式,都应该尽快完成。

    在as下的代码示例

    改module下的在build.gradle 文件里面,dependencies目录下添加这一句话

    compile 'de.greenrobot:eventbus:2.4.0'

    在连网的情况下,build工程,as会自动去网上下载相应的jar包。build结束后就可以编程了。

    1.定义event。在FirstEvent.java中的代码如下

     1 public class FirstEvent {
     2 
     3     private String msg;
     4     public FirstEvent(String str){
     5         msg = str;
     6     }
     7 
     8     public String getMsg(){
     9         return msg;
    10     }
    11 }

    2.注册一个订阅者,在MainActivity.java 中的onCreate()方法中加入如下代码

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

    3.发布一个事件。在SecondActivity中发布一个事件,当点击button后发布事件,代码如下

     1   protected void onCreate(Bundle savedInstanceState) {
     2         super.onCreate(savedInstanceState);
     3         setContentView(R.layout.activity_second);
     4 
     5         btn = (Button)findViewById(R.id.second_btn);
     6         btn.setOnClickListener(new View.OnClickListener() {
     7             @Override
     8             public void onClick(View v) {
     9                 
    10                 //发布一个事件
    11                 EventBus.getDefault().post(new FirstEvent("this is an event. "));
    12             }
    13         });

    4.接收并处理一个事件,在MainActivity中处理改事件,添加如下代码。

    1  public void onEventMainThrend(FirstEvent event){
    2         String str = "this is in main activity , "+event.getMsg();
    3 
    4         Log.d("yuqt",str);
    5         tv.setText(str);
    6         Toast.makeText(this,str,Toast.LENGTH_LONG).show();
    7     }

    5.注销事件,在onDestroy()中进行注销。

    1    protected void onDestroy() {
    2         super.onDestroy();
    3         EventBus.getDefault().unregister(this);
    4     }

    完成。

  • 相关阅读:
    js常用工具函数
    vue-cli跨域问题解决
    charles抓包404问题(左侧不显示配置)
    vuex存储与本地储存(localstorage、sessionstorage)的区别(笔记)
    借助axios的拦截器实现Vue.js中登陆状态校验的思路(笔记)
    cornerstone使用注意点
    本地仓库连接远程仓库,git本地新建项目上传到远程git仓库上正确流程
    做一个不那么差的程序员
    解决 php Call to undefined function shm_attach()
    Redis 常用的数据结构
  • 原文地址:https://www.cnblogs.com/yuqt/p/5042985.html
Copyright © 2011-2022 走看看