EventBus简单使用
来源:互联网 发布:mac os 未能验证更新 编辑:程序博客网 时间:2024/05/22 06:39
简介:
EventBus是基于观察者/订阅者模型
1.订阅者订阅自己希望的事件类型,发布者将事件发送到EventBus后,由EventBus决定将事件交给哪个订阅者处理
2.使用EventBus,EventBus最常用的几个方法原型:
* EventBus.getDefault().register(Object subscriber);
* EventBus.getDefault().unregister(Object subscriber);
* EventBus.getDefault().post(Object event);
第一个为订阅者订阅事件,一旦在类中调用这个方法,EventBus就会遍历类中的方法,将声明为处理事件的方法存起来,等到有订阅者订阅的事件时,就会调用相应的方法处理
第二个为取消注册订阅事件
第三个为发送一个事件到EventBus
注:本文例子中EventBus均为3.X
简单例子
需求为点击第二个页面的按钮,改变第一个页面的文本显示
首先需要定义事件类型,其实也是一个类:
package com.example.eventbussimple;/** * Created by user on 2016/8/4 004. */public class EventBean { public EventBean(String name) { this.name = name; } public String name;}
第一页代码如下:
package com.example.eventbussimple;import android.content.Intent;import android.os.Bundle;import android.support.v7.app.AppCompatActivity;import android.view.View;import android.widget.TextView;import org.greenrobot.eventbus.EventBus;import org.greenrobot.eventbus.Subscribe;import org.greenrobot.eventbus.ThreadMode;public class MainActivity extends AppCompatActivity { private TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); EventBus.getDefault().register(this);//订阅事件 textView = (TextView) findViewById(R.id.id_text1); findViewById(R.id.id_button1).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(MainActivity.this, Main2Activity.class)); } }); } @Override protected void onDestroy() { super.onDestroy(); EventBus.getDefault().unregister(this);//取消订阅事件 } //处理事件方法,在3.0以后都需要使用注解来表明这个 方法可以处理EventBus事件 //threadMode会在下面解释 @Subscribe(threadMode = ThreadMode.MAIN) public void handleMessage(EventBean event) { textView.setText(event.name); }}
第二页代码为
package com.example.eventbussimple;import android.support.v7.app.AppCompatActivity;import android.os.Bundle;import android.view.View;import android.widget.Button;import org.greenrobot.eventbus.EventBus;public class Main2Activity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main2); Button button = (Button) findViewById(R.id.id_button); if (button != null) { //点击按钮发送事件 button.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { EventBus.getDefault().post(new EventBean("xiaowj")); } }); } }}
至此,点击第二页按钮,第一页的文本就能变为xiaowj
EventBus的ThreadMode
细心的小伙伴在上面的例子中应该注意到了threadMode这个东西,简单来说就是指明处理事件的方法要在哪种线程中执行
ThreadMode有四种枚举类型,下面会一一解释
- ThreadMode.POSTING 事件处理函数在事件发送线程中执行。需要尽快处理事件,这种方式是同步调用处理函数,如果长时间处理事件会导致阻塞事件发送线程运行
- ThreadMode.MAIN 事件处理函数在主线程中执行(UI线程)。这个不用说,事件处理函数需要尽快处理事件,不然会导致程序无响应
- ThreadMode.BACKGROUND 如果发送事件线程是主线程,就新开线程处理这个事件,如果发送事件线程不是主线程,就在发送事件的线程中执行事件处理函数。这个模式也是需要尽快处理事件,如果发送事件线程不是主线程,会同步调用事件处理函数,如果没有快速处理事件, 同样会导致事件发送线程阻塞
- ThreadMode.ASYNC 新开线程处理事件,如果事件需要长时间处理,建议选用这种模式开发
各位小伙伴可以根据上面描述选择合适的ThreadMode处理事件
题外话,下周会更新EventBus源码分析
0 0
- EventBus的简单使用
- eventbus简单使用
- EventBus的简单使用
- Eventbus简单使用
- EventBus的简单使用
- EventBus简单使用教程
- EventBus的简单使用
- EventBus的简单使用
- EventBus简单使用
- EventBus的简单使用
- EventBus简单使用
- Eventbus简单使用
- EventBus的简单使用
- EventBus 3.0 简单使用
- EventBus的简单使用
- EventBus简单使用
- EventBus的简单使用
- eventbus 简单使用步骤
- 【递推】【vijos1060】盒子
- Darwin Streaming Server 安装流程
- mac class文件反编译jdgui
- 怎么在js中取java变量的值
- 使用ProcessBuilder创建process时,BufferedReader.readLine()超时
- EventBus简单使用
- 彻底明白Android中AIDL及其使用
- 230 - Borrowers
- Java 集合:Map 系列(HashMap,HashTable)
- 教你上传本地代码到github
- c/c++ 使用比long long还大的类型
- IOS UIWebView 的缩放问题
- iOS native 与 js 通信 资料汇总
- 随机模拟的基本思想和常用采样方法(sampling)