Android EventBus3.0
来源:互联网 发布:mac上制作手机铃声 编辑:程序博客网 时间:2024/06/01 09:10
为什么用EventBus:
Fragment 和 Fragment 或者两个没有联系Activity 如果之间进行通讯怎么处理? 写广播吗 ,不仅麻烦而且还浪费资源 。那我们如何的优雅的解决呢。
应用:
· 配置
compile 'org.greenrobot:eventbus:3.0.0'
· 注册事件
EventBus.getDefault().register(MainActivity.this);```
· 取消事件
EventBus.getDefault().unregister(this);
· 定义消息事件类
public class MessageEvent { private String message; public MessageEvent(String message) { this.message = message; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; }}
然后在接收类里面写个接收自定义方法(EventBus3.0之后才可以自定义)
@Subscribe(threadMode = ThreadMode.MAIN) public void onMoonEvent(MessageEvent messageEvent){ tv_message.setText(messageEvent.getMessage()); Toast.makeText(MainActivity.this,"随便做什么",Toast.LENGTH_LONG).show(); }
· 注:EventBus包含4个ThreadMode:POSTING ,MAIN,BACKGROUND,ASYNC
ThreadMode: POSTING 这个订阅者(方法)和post在同一个线程中。
ThreadMode: MAIN:订阅者将在Android的主线程(UI线程)中被调用。
ThreadMode: BACKGROUND:订阅者将在后台线程中被调用。如果发送时候的线程不是主线程,事件处理方法将直接在发送时的线程中被调用。
ThreadMode: ASYNC:订阅者将在一个单独的线程中被调用。这个线程独立于发送时的线程和主线程。EventBus使用一个线程池来高效复用线程,复用
如果同时操作它们的顺序依次为如图:
全部代码如下:
public class MainActivity extends AppCompatActivity { private TextView tv_message; private Button bt_message; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); EventBus.getDefault().register(MainActivity.this); tv_message=(TextView)this.findViewById(R.id.tv_message); tv_message.setText("第一个接收类"); bt_message=(Button)this.findViewById(R.id.bt_message); bt_message.setText("跳转到第二个发送类"); bt_message.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { startActivity(new Intent(MainActivity.this,SecondActivity.class)); } }); } @Override protected void onDestroy() { super.onDestroy(); //取消注册事件 EventBus.getDefault().unregister(this); } @Subscribe(threadMode = ThreadMode.MAIN) public void onMoonEvent(MessageEvent messageEvent){ tv_message.setText(messageEvent.getMessage()); Toast.makeText(MainActivity.this,"随便做什么",Toast.LENGTH_LONG).show(); }}
第二个发送事件类:
public class SecondActivity extends AppCompatActivity { private Button bt_message; private TextView tv_message; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv_message=(TextView)this.findViewById(R.id.tv_message); tv_message.setText("SecondActivity"); bt_message=(Button)this.findViewById(R.id.bt_message); bt_message.setText("发送事件"); bt_message.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { EventBus.getDefault().post(new MessageEvent("第二个发送事件类")); finish(); } }); }
阅读全文
0 0
- Android EventBus3.0
- 【Android】- EventBus3.0使用详解
- EventBus3.0 快速开始(Android Studio)
- Android中EventBus3.0 源码解析
- Android EventBus3.0使用及源码解析
- Android事件总线 EventBus3.0用法
- Android中EventBus3.0的使用
- EventBus3.0 在Android上的使用
- Android之EventBus3.0的简单用法
- android 开发 EventBus3.0不同之处详细介绍
- Android事件总线 EventBus3.0用法学习
- android事件总线EventBus3.0简单使用
- Eventbus3.0
- EventBus3.0
- EventBus3.0
- EventBus3.0
- Android之EventBus1.0 和EventBus3.0的使用详解
- android开源项目EventBus3.0的使用
- Hibernate的查询
- echarts实现web展示资源监控类似于windows任务管理器资源监控样子
- java时间for循环
- ROS仿真小车python键盘控制测试
- Tablayout+Viewpage
- Android EventBus3.0
- C++程序报错new types may not be defined in a return type?
- JAX-WS与JAX-RS
- Apache Common 工具包
- MySQL:原表修改后,如何更新关联表
- 下面介绍一个开源的OCR引擎Tesseract2。值得庆幸的是虽然是开源的但是它的识别率较高,并不比其他引擎差劲。网上介绍Tessnet2也是当时时间排名第三的识别引擎,只是后来慢慢不维护了,目前是G
- EXT combobox expand()刷新问题
- 51nod 1279 扔盘子
- rm: remove regular file `t1.sh'?