EventBus学习笔记(三)
来源:互联网 发布:手机延时软件 编辑:程序博客网 时间:2024/05/31 06:21
转发请注明地址:http://blog.csdn.net/qq_36145843/article/details/66476845(谢谢~!)
EventBus学习笔记(一)
EventBus学习笔记二
上一篇文章我们简单的介绍了一下EventBus的粘性事件。这篇文章我们来讲讲EventBus的优先级和事件取消。
优先级(Priorities)
在相同的传递线程(ThreadMode)中,较高优先级的订阅户将在其他优先级较低的订阅户之前接收事件。默认优先级为0。
定义优先级:
@Subscribe(priority = 1);public void onEvent(MessageEvent event) { ...}
接下来我们来做一个小demo来测试效果:
public class MainActivity extends AppCompatActivity { private int i = 0; private TextView mTextView; private Button mButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTextView = (TextView) findViewById(R.id.textView); mButton = (Button) findViewById(R.id.button); mButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mTextView.setText(""); EventBus.getDefault().post(new MessageEvent("测试")); } }); } @Subscribe(priority = 2,threadMode = ThreadMode.MAIN) public void onMessageEvent(MessageEvent event) { mTextView.append(event.message+"========>priority = 2 " + i++ +"\n"); } @Subscribe(priority = 1,threadMode = ThreadMode.MAIN) public void onEvent(MessageEvent event) { mTextView.append(event.message+"========>priority = 1 " + i++ +"\n"); } @Subscribe(threadMode = ThreadMode.MAIN) public void onEvent2(MessageEvent event) { mTextView.append(event.message+"========>priority = 0 " + i++ +"\n"); } @Override protected void onStart() { super.onStart(); //注册EventBus EventBus.getDefault().register(this); } @Override protected void onStop() { super.onStop(); //注销EventBus EventBus.getDefault().unregister(this); }}
上述代码设置了三个订阅优先级,可以看到运行效果如下:
优先级还是比较好理解的。
事件取消
通过从订阅者的事件处理方法调用cancelEventDelivery (Object event ) 来取消事件传递过程 。任何其他活动传送将被取消,后续订阅者将不会收到活动。
@Subscribepublic void onEvent(MessageEvent event){ // Process the event ... // Prevent delivery to other subscribers EventBus.getDefault().cancelEventDelivery(event) ;}
现在我们将上述代码让第三个不接收事件:
public class MainActivity extends AppCompatActivity { private int i = 0; private TextView mTextView; private Button mButton; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mTextView = (TextView) findViewById(R.id.textView); mButton = (Button) findViewById(R.id.button); mButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mTextView.setText(""); EventBus.getDefault().post(new MessageEvent("测试")); } }); } @Subscribe(priority = 2) public void onMessageEvent(MessageEvent event) { mTextView.append(event.message+"========>priority = 2 " + i++ +"\n"); } @Subscribe(priority = 1) public void onEvent(MessageEvent event) { mTextView.append(event.message+"========>priority = 1 " + i++ +"\n"); EventBus.getDefault().cancelEventDelivery(event); } @Subscribe() public void onEvent2(MessageEvent event) { mTextView.append(event.message+"========>priority = 0 " + i++ +"\n"); } @Override protected void onStart() { super.onStart(); //注册EventBus EventBus.getDefault().register(this); } @Override protected void onStop() { super.onStop(); //注销EventBus EventBus.getDefault().unregister(this); }}
运行效果如下图:
可以观察到我上述代码将threadMode去掉了,如果在 threadMode = ThreadMode.MAIN 中使用cancelEventDelivery(event) 的话将不能取消事件传递,因为cancelEventDelivery(event)方法只能在ThreadMode.POSTING中调用才有效。
好了,这篇文章到此结束。
源码地址 这里包括粘性事件的源码,和优先级的源码。
0 0
- EventBus学习笔记(三)
- EventBus学习笔记(一)
- EventBus学习笔记-什么是EventBus
- Guava学习笔记:EventBus
- Guava学习笔记:EventBus
- Guava学习笔记:EventBus
- Guava学习笔记:EventBus
- EventBus学习笔记
- EventBus的学习笔记
- EventBus学习笔记
- EventBus学习笔记
- Guava学习笔记:EventBus
- EventBus 学习笔记
- Guava学习笔记:EventBus
- EventBus学习笔记
- RxJava、EventBus学习笔记
- EventBus源码学习笔记
- Android EventBus学习笔记
- 自己实现Struts2(五)实现StrutsPrepareAndExecuteFilter
- Servlet与JSP思维导图
- L1-2. 点赞
- android7.0闪退问题java.lang.SecurityException: MODE_WORLD_READABLE no longer supported
- ViewPager(懒加载)+Fragment+自定义View
- EventBus学习笔记(三)
- LaTeX初学知识点总结
- L1-3. 情人节
- Android热修复技术初览
- eclipse下配置tomcat
- POJ 1847 火车变轨道 (简单最短路)
- 算法第五周解题报告
- TensorFlow使用的一个小案例
- Android studio下使用 NDK 之 Hello world