<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      安卓筆記俠

      專注安卓開發

      導航

      Android事件總線(三)otto用法全解析

      前言

      otto 是 Square公司發布的一個發布-訂閱模式框架,它基于Google Guava 項目中的event bus模塊開發,針對Android平臺做了優化和加強。雖然Square已經停止了對otto的更新并推薦使用RxJava和RxAndroid來替代它,但是otto的設計理念和源碼仍舊值得學習,這一篇先來學習下otto的使用方法。

      添加依賴庫

      首先配置gradle,如下所示。

      compile 'com.squareup:otto:1.3.8'

      定義消息類

      與EventBus一樣,我們接著定義消息類,它是一個bean文件,如下所示。

      public class BusData {
          public String message;
          public BusData(String message){
              this.message=message;
          }
          public String getMessage() {
              return message;
          }
          public void setMessage(String message) {
              this.message = message;
          }
      }
      View Code

      單例封裝Bus

      otto的Bus類相當與EventBus中的EventBus類,它封裝了otto的主要功能,但它不是個單例,每次都要用new創建出來,這樣顯然不是很方便,因此我們用單例模式將它封裝起來,如下所示。

      public class OttoBus extends Bus{
          private volatile static OttoBus bus;
          private OttoBus (){
          }
          public static OttoBus getInstance() {
              if (bus == null) {
                  synchronized (OttoBus.class){
                   if(bus==null){
                       bus = new OttoBus();
                   }
                  }
              }
              return bus;
          }
      }
      View Code

      注冊和取消注冊訂閱事件

      otto同樣需要注冊和取消注冊訂閱事件,通過OttoBus得到Bus對象,調用Bus的register和unregister方法來注冊和取消注冊,同時我們定義一個button,點擊這個button跳轉到SecondActivity,SecondActivity用來發送事件。代碼如下所示。

      public class MainActivity extends AppCompatActivity {
          private Button bt_jump;
          private TextView tv_message;
          private Bus bus;
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
              tv_message= (TextView) this.findViewById(R.id.tv_message);
              bt_jump= (Button) this.findViewById(R.id.bt_jump);
              bt_jump.setText("跳轉到SecondActivity");
              bt_jump.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View v) {
                      startActivity(new Intent(MainActivity.this,SecondActivity.class));
                  }
              });
              bus=OttoBus.getInstance();
              bus.register(this);
          }
      
       @Override
          protected void onDestroy() {
              super.onDestroy();
               //取消注冊訂閱事件
              bus.unregister(this);
          }
      View Code

      事件訂閱者處理事件

      和EventBus一樣用@Subscribe來訂閱事件,在MainActivity中添加如下代碼。

      @Subscribe
      public void setContent(BusData data) {
            tv_message.setText(data.getMessage());
      }
      View Code

      同樣的用textView來顯示接收到的消息。

      使用post發送事件
      創建SecondActivity,并設置一個button,點擊發送事件,并finish掉自身,如下所示。

      public class SecondActivity extends AppCompatActivity {
          private Button bt_jump;
          private OttoBus bus;
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
              bt_jump= (Button) this.findViewById(R.id.bt_jump);
              bt_jump.setText("發送事件");
              bt_jump.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View v) {
                      OttoBus.getInstance().post(new BusData("劉望舒的博客更新了"));
                      finish();
                  }
              });
          }
      }
      View Code

      這樣我們運行程序點擊MainActivity的”跳轉到SecondActivity”按鈕直接跳轉到SecondActivity,再點擊”發送事件”按鈕,SecondActivity被finish掉回到MainActivity ,MainActivity 中的textView的文字變為了”劉望舒的博客更新了”。

      使用@Produce來發布事件
      Produce注解用來生產發布事件,需要注意的是它生產事件前它需要注冊,并且在生產完事件后需要取消注冊。如果使用這種方法則在跳轉到發布者所在的類中則會立即產生事件并觸發訂閱者,修改SecondActivity,代碼如下所示

      public class SecondActivity extends AppCompatActivity {
          private Button bt_jump;
          private OttoBus bus;
          @Override
          protected void onCreate(Bundle savedInstanceState) {
              super.onCreate(savedInstanceState);
              setContentView(R.layout.activity_main);
              bt_jump= (Button) this.findViewById(R.id.bt_jump);
              bt_jump.setText("發送事件");
              bt_jump.setOnClickListener(new View.OnClickListener() {
                  @Override
                  public void onClick(View v) {               
                      finish();
                  }
              });
              bus=OttoBus.getInstance();
              bus.register(this);
          }
          @Produce
          public BusData setInitialContent() {
              return new BusData("劉望舒的博客更新了");
          }
          @Override
          protected void onDestroy() {
              super.onDestroy();
              bus.unregister(this);
          }
      }
      View Code

      在MainActivity跳轉到SecondActivity時,MainActivity會馬上收到事件。

      github源碼下載

      posted on 2016-10-31 00:40  安卓筆記俠  閱讀(1099)  評論(0)    收藏  舉報

      主站蜘蛛池模板: 亚洲精品一区二区三区蜜| 91偷自国产一区二区三区| 和林格尔县| 91亚洲国产成人精品性色| 亚洲av无码精品色午夜蛋壳| 国产精品播放一区二区三区| 亚洲男人成人性天堂网站| 亚洲一级特黄大片一级特黄| 国产麻豆精品av在线观看| 亚洲 日本 欧洲 欧美 视频| 性XXXX视频播放免费直播| 人人妻人人澡人人爽欧美一区双| 丝袜老师办公室里做好紧好爽| 亚洲成亚洲成网中文字幕| 国产又色又爽又黄的免费软件| 中国亚州女人69内射少妇| 国产成人亚洲无码淙合青草| 好吊视频一区二区三区在线| 亚洲日韩乱码一区二区三区四区| 成人国产精品日本在线观看| 一级片免费网站| 美女扒开奶罩露出奶头视频网站 | 激情国产一区二区三区四区| 国产成人av乱码在线观看| 亚洲午夜久久久影院伊人| 中文字幕免费不卡二区| 激情综合五月| 最近中文字幕国产精品| 人妻系列无码专区69影院| 青草99在线免费观看| 玩两个丰满老熟女久久网| 亚洲精品中文字幕一区二| 色播久久人人爽人人爽人人片av| 国产人妻大战黑人第1集| 国产亚洲精品黑人粗大精选| 人人爽人人爽人人片a免费| 国产精品入口麻豆| 天天爽夜夜爱| 国产午夜视频在线观看| 国产女同疯狂作爱系列| 久久人人97超碰精品|