Android用Broadcast实现EventBus的功能和用法
2016-04-06 15:58
381 查看
以前一直用Android的广播Broadcast来实现消息传递,后来不知怎么的大家都用EventBus了。我挺奇怪的,就问别人为什么要用EventBus,给我的回答是说EventBus简单易用,消息类型明确,不会被别的应用监听到、干扰到。
我就在想,如果Broadcast也能做到这些,那么岂不是就不需要再用EventBus了?
今天闲来无事,研究了下,发现确实可以做到上面的几点,那么意味着以后就不需要引入EventBus了。
support V4包里引入了这么个工具类,叫LocalBroadcastManager 。它是个轻量级的广播,和原来的广播相比,它只能在单一进程发送接收,不会被别的应用监测到,也不会被别的应用冒充发广播干扰到。总而言之是个轻量级的广播。
那么对它进行简单的封装,就可以做到和EventBus的用法一模一样了,下面是一个登录成功的发送消息和接收消息:
发送消息时这么用:
接收消息时这么用:
如果以后再有别的消息,定义好消息类型,然后复制粘贴sendLoginMessage()和registerLoginListener()方法即可。是不是和EventBus用法一模一样?
我就在想,如果Broadcast也能做到这些,那么岂不是就不需要再用EventBus了?
今天闲来无事,研究了下,发现确实可以做到上面的几点,那么意味着以后就不需要引入EventBus了。
support V4包里引入了这么个工具类,叫LocalBroadcastManager 。它是个轻量级的广播,和原来的广播相比,它只能在单一进程发送接收,不会被别的应用监测到,也不会被别的应用冒充发广播干扰到。总而言之是个轻量级的广播。
那么对它进行简单的封装,就可以做到和EventBus的用法一模一样了,下面是一个登录成功的发送消息和接收消息:
/** * weichenglin create in 2016/3/16 */ public class MyListener { private final static String ACTION_LOGIN_SUCCESS = "ACTION_LOGIN_SUCCESS";//消息类型 private static volatile MyListener myListener = null; private static LocalBroadcastManager mLocalBroadcast = null; public static MyListener getInstance() { if (myListener == null) { synchronized (MyListener.class) { if (myListener == null) { myListener = new MyListener(); } } } if (mLocalBroadcast == null) { mLocalBroadcast = LocalBroadcastManager.getInstance(MyApplication.getInstance()); } return myListener; } public void sendLoginMessage(Intent intent) { intent.setAction(ACTION_LOGIN_SUCCESS); mLocalBroadcast.sendBroadcast(intent); } public void registerLoginListener(BroadcastReceiver broadcastReceiver) { mLocalBroadcast.registerReceiver(broadcastReceiver, new IntentFilter(ACTION_LOGIN_SUCCESS)); } }
发送消息时这么用:
MyListener.getInstance().sendLoginMessage(new Intent().putExtra("key","value"));
接收消息时这么用:
MyListener.getInstance().registerLoginListener(new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { String value = intent.getStringExtra("key"); Log.v("tag_2","value = " + value); } });
如果以后再有别的消息,定义好消息类型,然后复制粘贴sendLoginMessage()和registerLoginListener()方法即可。是不是和EventBus用法一模一样?
相关文章推荐
- android studio 中的编码问题
- Android GridView增加HeaderView和FooterView的实现
- android基础部分再学习---Context
- 安卓通过有序广播拦截特定电话!
- Java&Android学习工具网址
- EventBus -- 源码解析
- Android中分辨率,DPI,DP与PX对应关系
- Android gradle 打渠包的一种方式
- Android Studio Logcat显示不全问题
- 使用Sikuli测试Android应用思路
- Android TabHost使用
- android DPI 计算 及单位换算
- 独立项目 - 1 - 整体规划
- Android GridView添加网格线
- android笔记2——关于图片缓存的一些注意事项
- Android开发系列通信篇之EventBus
- android按下返回键弹出提示框的几种做法!
- android中File文件写的实现
- android 6.0 logcat机制(一)java层写log,logd接受log
- 聊天软件登陆界面的实现