手机影音第十六天,集成eventbus代替广播

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了手机影音第十六天,集成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代替广播的主要内容,如果未能解决你的问题,请参考以下文章

手机影音第十二天,集成vitamio万能播放器

第十六天

学习python第十六天, 一周总结

团队冲刺第十六天

Python 基础学习第十六天

《Python编程从入门到实践》——学习python的第十六天