标签:利用eventbus代替广播传递对象 实现获取音乐信息
代码已经托管到码云上,有兴趣的小伙伴可以下载看看
https://git.oschina.net/joy_yuan/MobilePlayer
一 EventBus 3.0 ---利用eventbus代替广播来获取音乐的数据。
EventBus是一款针对Android优化的发布/订阅事件总线。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,线程之间传递消息.优点是开销小,代码更优雅。以及将发送者和接收者解耦。
1、下载EventBus的类库
源码:https://github.com/greenrobot/EventBus
在Android Studio里使用EventBus 的话,只需要在build.gradle里加入下面这句,然后sync一下即可。
compile ‘org.greenrobot:eventbus:3.0.0‘
2、EventBus 的用法
a 、注册EventBus,在需要订阅eventbus的activity中,注册eventbus即可
如在AudioPlayerActivity中的onCreate里注册
EventBus.getDefault().register(this);
b、取消注册。在onDestroy里取消注册eventbus
EventBus.getDefault.unregister(this);
c、订阅事件
在Activity里订阅事件,当发布者发布相关的事件后,即可在此接收到
这里要注意的是,订阅的方法,一定是public的,然后上面用注解说明订阅事件在哪个线程执行,以及优先级priority,,这个优先级类似有序广播的优先级。
/** * 订阅eventbus */ @Subscribe(threadMode=ThreadMode.MAIN,sticky = false,priority = 99) public void showData(MediaItem item) { showViewData(); checkPlayMode(); }
d、发布事件.
在AudioPlayerService里的准备播放音乐时,发布事件,将要播放的音乐的对象传过去,那么activity里订阅了该信息的即可接受到
/** * 准备好播放时回调 */ class MyOnPreparedListener implements MediaPlayer.OnPreparedListener { @RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN) @Override public void onPrepared(MediaPlayer mp) { startAudio(); //在这里发送广播,通知activity,播放的进度、音乐名称、歌唱家等信息 // notifyChange(OPENAUDIOPLAYER); //EventBus发布信息 EventBus.getDefault().post(item); } }
本文出自 “YuanGuShi” 博客,请务必保留此出处http://cm0425.blog.51cto.com/10819451/1952143
标签:利用eventbus代替广播传递对象 实现获取音乐信息
原文地址:http://cm0425.blog.51cto.com/10819451/1952143