zoukankan      html  css  js  c++  java
  • Android Otto框架浅析

    今天要介绍的是一个Android中使用得比較多的android 事件总线 EventBus模式的一个框架Otto。

    Otto 官网:http://square.github.io/otto/


    一、Android Studio中配置Otto (Eclipse中直接下载jar包导入)

    跟之前介绍的其它的框架一样,它只须要简单地在build.gradle中配置以下一行红色字体就可以

    dependencies {
        compile fileTree(dir: 'libs', include: ['*.jar'])
        compile 'com.android.support:appcompat-v7:19.+'
        //otto 所须要依赖的包
        compile 'com.squareup:otto:+'

    }


    二、Otto事件总线框架浅析

    1、为什么要用Otto框架?

    Otto框架的主要功能是帮助我们来减少多个类之间的耦合度的(解耦)。

    譬如:一个类A和还有一个类B之间。假设A要操作B中的某个方法。


    传统的方法:A直接调用B对象的该方法(耦合在一起)

    事件总线机制:A不须要调用B类的方法,而只须要产生并发出 一个“事件通知”, 假设B订阅了该“事件”

    那么它将会接受到这个事件,做出对应的操作。这样就被解耦了。


    2. Otto框架使用(结合代码介绍)

    Otto框架事实上相对之前的几个Android开源框架来说。更easy理解。

    它主要运用到一个类: Bus类(用于注冊类,注销类。公布事件)

    两个注解: @Subscribe (订阅)    @Produce (生产)    【都是针对“事件”的注解】




    为了方便,我这边没有使用两个类来做这个Demo。 只是假设大家要试的话也能够,只是记住一点,不管是

    公布者类  还是 订阅者类, 都须要用Bus进行类的注冊,还有注销。

    否则将没法被Bus识别,这样就无法生效了。

    以下的Demo, 仅为了让大家知道“事件”被产生了之后。post出来,全部订阅了该事件的类都会接到该事件,接受的先后顺序,不由我们控制!

    public class MyActivity extends ActionBarActivity {
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_my);
            findViewById(R.id.button_change).setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    BusProvider.getBusInstance().post(new DataChangedEvent("this is changed String"));//公布事件
                }
            });
        }
    
        @Override
        protected void onResume() {
            super.onResume();
            BusProvider.getBusInstance().register(this);//注冊
            
        }
    
        @Override
        protected void onPause() {
            super.onPause();
            BusProvider.getBusInstance().unregister(this);//注销
        }
    
        @Subscribe   //订阅事件DataChangedEvent
        public void sayGoodOnEvent(DataChangedEvent event){
            Log.e("event", "good");
        }
    
        @Subscribe  //订阅事件
        public void sayBadOnEvent(DataChangedEvent event){
            Log.e("event", "bad");
        }
    
        @Produce    //产生事件
        public DataChangedEvent produceDataChangedEvent(){
            return new DataChangedEvent("this is changed String");
        }
    
    }

  • 相关阅读:
    坐标转换convertRect
    error this is not a media message!!!
    嵌入式-第一季-第4课
    嵌入式-第一季-第2课
    嵌入式-第一季-第3课
    嵌入式-第一季-第1课
    web-15. 事件与函数
    web-14. 表达式与程序流程
    web-13. 数组和字符串
    数据-第5课-线性表的本质
  • 原文地址:https://www.cnblogs.com/wzzkaifa/p/6802158.html
Copyright © 2011-2022 走看看