欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解EventBus 3.x 的快速使用

 更新時間:2018年02月27日 09:31:57   作者:ayuhani  
這篇文章主要介紹了詳解EventBus 3.x 的快速使用,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

EventBus 可以很方便地進行各組件間的通信,解耦性更強,比廣播更好用。

EventBus 3 簡介

EventBus是一種為了優(yōu)化Android組件之間事件傳遞的解耦工具,通過發(fā)布/訂閱事件總線來實現(xiàn)事件在不同組件之間的事件傳遞。

在EventBus 3之前,greenrobot團隊因為考慮性能原因所以比較抵觸使用注解框架。目前的EventBus3開始使用注解來申明訂閱事件的處理方法。雖然目前Android 6 和ART都有了,但是對于Java反射造成的性能影響還是沒能很好的解決。

在EventBus3中,greenrobot團隊通過利用在編譯時檢索所有注解代碼,然后生成一個包含所有在運行時要花很大代價才能獲取的數(shù)據(jù)的類,通過這種新的注解處理方式來提升性能,讓EventBus3比其他的eventbus會更加快。在后文中會貼出和otto的性能比較。

EventBus 3 和 EventBus 2.x 的區(qū)別

回調(diào)方法改動

由于API的改動,會導致EventBus3和之前使用老版本的EventBus不兼容,因為之前版本(EventBus 2.x),在注冊完事件之后,會要求寫相應 onEvent()方法,包括onEvent()、onEventAsync()、onEventBackground()、onEventMainThread() 分別對應 @Subscrible 、@Subscrible(threadMode = ThreadMode.ASYNC)、@Subscribe(threadMode = ThreadMode.BACKGROUND)、@Subscribe(threadMode = ThreadMode.MAIN) 。EventBus 3中在未聲明threadMob時,默認的線程模式為ThreadMode.POSTING。

異常容錯處理

在EventBus3中,如果在@Subscrible標注的方法中,如果程序出錯,不會立即使程序crash,而是由EventBus攔截異常,并打印錯誤日志。

用戶可以通過EventBusBuilder來配置獲取EventBus實例后的對象,來決定在處理event時是否需要拋出異常信息:

 eventBus = EventBus.builder().sendNoSubscriberEvent(false)    
       .sendSubscriberExceptionEvent(false)            
       .throwSubscriberException(BuildConfig.DEBUG) //只有在debug模式下,會拋出錯誤異常 
       .build();

以上代碼使用Builder設計模式,來構(gòu)建返回一個eventBus實例。在調(diào)試階段,可以在程序出現(xiàn)異常時直接Crash發(fā)現(xiàn)錯誤。

快速使用

1. 編譯

compile 'org.greenrobot:eventbus:3.1.1'

2. 自定義事件類

public class MessageEvent {
  // 成員變量根據(jù)自己的需求創(chuàng)建
  private int type;

  // 通過構(gòu)造方法傳遞數(shù)據(jù)
  public MessageEvent(int type) {
    this.type = type;
  }

  public int getType() {
    return type;
  }

  public void setType(int type) {
    this.type = type;
  }
}

3. 注冊事件與解除注冊

一般來說,在 OnCreate() 方法中進行注冊:

@Override
protected void onCreate(Bundle savedInstanceState) {
  super.onCreate(savedInstanceState);
  setContentView(R.layout.activity_layout);
  EventBus.getDefault().register(this);
}

與之對應的,在 OnDestroy() 中解除注冊:

@Override
protected void onDestroy() {
  super.onDestroy();
  EventBus.getDefault().unregister(this);
}

4. 發(fā)送事件

EventBus.getDefault().post(new MessageEvent(type));

5. 接收與處理事件

/**
* @Subscribe 注解必須要寫,線程需要指定
* 方法名可隨意
*/
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(MessageEvent event) {
  switch (event.getType()){
    // do your thing
  }
}

上面提到了線程模型,它一共有 5 種:

  1. POSTING(默認): 事件處理方法的線程跟發(fā)布事件的線程是同一個線程;
  2. MAIN:在 Android 中,事件處理方法在主線程 (UI線程) 中調(diào)用,不能進行耗時操作;
  3. MAIN_ORDERED:在 Android 中,事件處理方法在主線程 (UI線程) 中調(diào)用。 與 MAIN 不同的是,該事件將始終排隊等待發(fā)布,這確保了事件發(fā)布不會被阻塞;
  4. BACKGROUND:在 Android 中,事件處理方法在后臺線程中調(diào)用,因此不能進行 UI 操作。如果發(fā)布事件的線程是主線程 (UI線程),那么事件處理函數(shù)將會開啟一個后臺線程,如果果發(fā)布事件的線程是在后臺線程,那么事件處理函數(shù)就使用該線程;
  5. ASYNC:無論事件發(fā)布的線程是哪一個,事件處理方法始終會新建一個子線程運行,不能進行 UI 操作。

以上便是 EventBus 的最基本的使用,是不是很方便呢。希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Android編程實現(xiàn)兩個Activity之間共享數(shù)據(jù)及互相訪問的方法

    Android編程實現(xiàn)兩個Activity之間共享數(shù)據(jù)及互相訪問的方法

    這篇文章主要介紹了Android編程實現(xiàn)兩個Activity之間共享數(shù)據(jù)及互相訪問的方法,簡單分析了Android中Activity數(shù)據(jù)共享與訪問的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-11-11
  • 簡單實現(xiàn)Android讀取網(wǎng)絡圖片到本地

    簡單實現(xiàn)Android讀取網(wǎng)絡圖片到本地

    這篇文章主要為大家詳細介紹了如何簡單實現(xiàn)Android讀取網(wǎng)絡圖片到本地的方法,感興趣的小伙伴們可以參考一下
    2016-08-08
  • 故事講解Activity生命周期(貓的一生)

    故事講解Activity生命周期(貓的一生)

    關(guān)于Android中Activity的生命周期,網(wǎng)上大多數(shù)文章基本都是直接貼圖、翻譯API,比較籠統(tǒng)含糊不清。本文主要用故事講解Activity生命周期。下面跟著小編一起來看下吧
    2017-03-03
  • Android EditText限制輸入字數(shù)的方法

    Android EditText限制輸入字數(shù)的方法

    這篇文章主要介紹了Android EditText限制輸入字數(shù)的方法,涉及Android針對EditText文本與字符串操作相關(guān)技巧,需要的朋友可以參考下
    2016-01-01
  • Android webview用法實例簡析

    Android webview用法實例簡析

    這篇文章主要介紹了Android webview用法,結(jié)合實例形式簡單分析了Android中webview的功能、用法與相關(guān)注意事項,需要的朋友可以參考下
    2016-01-01
  • Android studio開發(fā)小型對話機器人app(實例代碼)

    Android studio開發(fā)小型對話機器人app(實例代碼)

    這篇文章主要介紹了Android studio開發(fā)一個小型對話機器人app,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • 打造酷炫的AndroidStudio插件

    打造酷炫的AndroidStudio插件

    這篇文章主要為大家詳細介紹了如何打造酷炫的AndroidStudio插件,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-12-12
  • 探討Android 的屏幕滾動操作不如 iPhone 流暢順滑的原因

    探討Android 的屏幕滾動操作不如 iPhone 流暢順滑的原因

    雖然很多Android手機的配置都比iPhone要高,比如大多數(shù)Andorid手機的內(nèi)存都有1GB,而iPhone 4S只有512MB內(nèi)存,但用過iPhone的人都知道Android手機在使用的時候總感覺沒有那么順滑,究竟為什么會出現(xiàn)這種現(xiàn)象呢?
    2014-07-07
  • Android入門教程之Vibrator(振動器)

    Android入門教程之Vibrator(振動器)

    本節(jié)我們介紹的是Vibrator(振動器),是手機自帶的振動器,其實就是Android給我們提供的用于機身震動的一個服務!當收到推送消息的時候我們可以設置震動提醒。
    2016-07-07
  • Android Webview與ScrollView的滾動兼容及留白處理的方法

    Android Webview與ScrollView的滾動兼容及留白處理的方法

    本篇文章主要介紹了Android Webview與ScrollView的滾動兼容及留白處理的方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-11-11

最新評論