Android EventBus的使用
2016-08-25 16:08
337 查看
Android EventBus的使用
1.EventBus 2.x的使用请见:http://blog.csdn.net/harvic880925/article/details/406601372.EventBus 3.0的使用
今天在这里讨论原理,只介绍一下使用方法和一些特点,等会在后面附上一些链接地址(原理和下载链接),亲们可以自己去看。
(1)订阅和取消订阅
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); EventBus.getDefault().register(this);//订阅 } @Override protected void onDestroy() { super.onDestroy(); EventBus.getDefault().unregister(this);//解除订阅 }
(2)priority的作用
priority 值越大优先级越高,不设置时最低(比设置了的低)
相同的优先级或者都没设置优先级时谁先订阅谁先收到消息
package com.example.eventbus; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; import android.widget.TextView; import de.greenrobot.event.Subscribe; import de.greenrobot.event.ThreadMode; /** * 功能:用于测试不同优先级 * 特点: * (1)priority 值越大优先级越高,不设置时最低(比设置了的低) * (2)相同的优先级或者都没设置优先级时谁先订阅谁先收到消息 * */ public class SecondActivity extends BaseActivity { private TextView textView; private Button jump; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_second); jump = (Button) findViewById(R.id.jump); jump.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { start(ThirdActivity.class); } }); } @Subscribe(threadMode = ThreadMode.MainThread) public void onEvent(MsgEvent event){ Log.e("-->", "SecondActivity onEvent:priority = null, sticky = null, msg=" + event.msgData); } @Subscribe(threadMode = ThreadMode.MainThread, priority = 101) public void onEventLowPriority(MsgEvent event){ Log.e("-->", "SecondActivity onEventLowPriority:priority = 101, sticky = null, msg=" + event.msgData); } @Subscribe(threadMode = ThreadMode.MainThread, priority = 101) public void onEventLowPriority2(MsgEvent event){ Log.e("-->", "SecondActivity onEventLowPriority2:priority = 101, sticky = null, msg=" + event.msgData); } @Subscribe(threadMode = ThreadMode.MainThread, priority = 102) public void onEventMidPriority(MsgEvent event){ Log.e("-->", "SecondActivity onEventMidPriority:priority = 102, sticky = null, msg=" + event.msgData); } @Subscribe(threadMode = ThreadMode.MainThread, priority = 102 , sticky = false) public void onStickyEventMidPriority(MsgEvent event){ Log.e("-->", "SecondActivity onStickyEventMidPriority:priority = 102, sticky = false, msg=" + event.msgData); } }
打印结果:
08-25 16:04:30.755: E/-->(21838): SecondActivity onEventMidPriority:priority = 102, sticky = null, msg=send first msg 08-25 16:04:30.755: E/-->(21838): SecondActivity onStickyEventMidPriority:priority = 102, sticky = false, msg=send first msg 08-25 16:04:30.755: E/-->(21838): SecondActivity onEventLowPriority:priority = 101, sticky = null, msg=send first msg 08-25 16:04:30.755: E/-->(21838): SecondActivity onEventLowPriority2:priority = 101, sticky = null, msg=send first msg 08-25 16:04:30.755: E/-->(21838): SecondActivity onEvent:priority = null, sticky = null, msg=send first msg
(3)Sticky
后订阅时,sticky为true的处理函数才能才能收到消息
后订阅时,priority优先级貌似无效
package com.example.eventbus; import de.greenrobot.event.EventBus; import de.greenrobot.event.Subscribe; import de.greenrobot.event.ThreadMode; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.util.Log; import android.view.ActionMode; import android.view.View; import android.widget.Button; import android.widget.TextView; /** * 功能:用于测试事件发送后才订阅消息,sticky的作用 * 事件发送方法:EventBus.getDefault().postSticky() * 描述:第一次显示该页面时不订阅,等postSticky消息发送后,再回到本页面时,在OnResume中订阅消息 * 特点: * (1)后订阅时,sticky为true的处理函数才能才能收到消息 * (2)后订阅时,priority优先级貌似无效 * */ public class UnregisterActivity extends Activity{ private boolean firstResume = true;//是否是第一次Resume private TextView textView; private Button jump; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); firstResume = true; jump = (Button) findViewById(R.id.jump); jump.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Intent in = new Intent(UnregisterActivity.this, SecondActivity.class); startActivity(in); } }); } @Subscribe(threadMode = ThreadMode.MainThread) public void onEvent(MsgEvent event) { Log.e("-->", "UnregisterActivity onEvent:" + event.msgData); } @Subscribe(threadMode = ThreadMode.MainThread, sticky = true) public void onStickyEvent(MsgEvent event) { Log.e("-->", "UnregisterActivity onStickyEvent: priority = null, msg = " + event.msgData); } @Subscribe(threadMode = ThreadMode.MainThread, sticky = true, priority = 1010) public void onStickyEvent2(MsgEvent event) { Log.e("-->", "UnregisterActivity onStickyEvent2:priority = 1010, msg=" + event.msgData); } @Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); if(!firstResume){ EventBus.getDefault().register(this); } firstResume = false; } @Override protected void onPause() { // TODO Auto-generated method stub super.onPause(); EventBus.getDefault().unregister(this); } }
消息发送后,返回到该页面时在OnResume中订阅消息,只有sticky=true的才能收到消息
这里附上我的demo下载地址:
EventBus 3.0相关参考链接:
http://www.cnblogs.com/whoislcj/p/5595714.html http://blog.csdn.net/angcyo/article/details/48166849
相关文章推荐
- Android apk 反编译
- Exception_android_InflateException
- Android Studio如何集成Genymotion
- android使用movie显示gif图片的自定义view
- AndroidEventBus简单总结
- android studio 单元测试
- Android - 解析Json框架:Gson实体类映射
- Android 模拟表单上传 多图片上传
- Android - 控件android:ems属性
- android kuangjia
- Android Studio代码不执行问题
- Android的各种Dialog
- android 项目更改包名的方法
- Android Logcat的使用
- android 集成第三方静态库的编译方法
- android 打开软件出现红框
- Android知识点汇总--第二篇
- AndroidStudio使用javadoc生成API文档
- Android LayoutInflater详解
- Android属性动画详解(一),属性动画基本用法