日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

Android基础 EventBus3 0实用教程

發布時間:2023/12/20 Android 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android基础 EventBus3 0实用教程 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

作為一個Android開發者,我們在日常的開發中肯定會使用到EventBus,比如說當我們在做app的消息模塊的時候,接收到后臺推送的消息之后,為了方便用戶查看,就需要把消息保存到本地,正常情況下在頁面上會有個badge顯示消息數量,如果我們不在badge顯示界面的話,就需要在接收到后臺推送之后更新badge上顯示的消息數量,這個時候就可以使用EventBus發出一個事件,這樣訂閱者接收到事件之后,就會從數據庫拿未讀消息數,顯示在badge上面。說了這么多,下面就簡單的介紹下EventBus的使用:

EventBus地址:GitHub

一、EventBus 介紹

ventBus是一個Android端優化的publish/subscribe消息總線,簡化了應用程序內各組件間、組件與后臺線程間的通信。這個消息總線主要有三個部分:

  • 事件(Event)
  • 事件訂閱者(Subscriber)(有沒有想到RxJava里面的訂閱者 ==。)
  • 事件發布者(Publisher)
  • 官方的關系圖:

    特征敘述:

    • 簡化組件間的通信
      • 事件發送者和接收者解耦
      • 在活動、片段和后臺線程中執行良好
      • 避免了復雜、易出錯的依賴關系和生命周期問題
    • 使你的代碼更加簡單
    • 快!
    • 小!(大約50K)
    • 在100,000,000+個程序上使用
    • 先進特征,比如指定線程、設置優先級等

    二、使用EventBus僅需四步

    1. 添加依賴

    使用Gradle:

    compile 'org.greenrobot:eventbus:3.0.0' 復制代碼

    或者Maven:

    <dependency><groupId>org.greenrobot</groupId><artifactId>eventbus</artifactId><version>3.0.0</version> </dependency> 復制代碼

    又或者下載Jar包添加到項目中 jar包下載

    2. 定義事件(Event)

    public class TestMsg { }復制代碼

    這個TestMsg由從事件發布者發出,到事件訂閱者接收,當然也可以加上額外的信息,比如下面可以傳遞name:

    public class TestMsg {private String name;public TestMsg(String name) {this.name = name;}public String getName() {return name;} } 復制代碼

    3. 定義事件接收者(Subscriber)

    首先在所屬的Activity的onCreate()里面注冊

    @Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_my_lib);EventBus.getDefault().register(this);} 復制代碼

    在onDestory里面取消注冊

    @Overrideprotected void onDestroy() {super.onDestroy();EventBus.getDefault().unregister(this);} 復制代碼

    然后定義處理事件:

    @Subscribe(threadMode = ThreadMode.MAIN)public void onEventMainThread(TestMsg testMsg) {if (testMsg != null) {Log.d("MainActivity", "你收到的名字為: "+testMsg.getName());}} 復制代碼

    這里的定義了事件接收者以及使用注解@Subscribe(threadMode = ThreadMode.MAIN)指定了執行的線程。ThreadMode有下面四種類型:

  • MAIN UI主線程

  • POSTING 默認調用方式,在調用post方法的線程執行,避免了線程切換,性能開銷最少

  • BACKGROUND 如果調用post方法的線程不是主線程,則直接在該線程執行。 如果是主線程,則切換到后臺單例線程,多個方法公用同個后臺線程,按順序執行,避免耗時操作

  • ASYNC 開辟新獨立線程,用來執行耗時操作,例如網絡訪問。

  • 當然這里可以在注解里面設置優先級,比如下面設置優先級為100,越大就越線先接收到事件:

    @Subscribe(threadMode = ThreadMode.POSTING,priority = 100)public void onEventMainThread(TestMsg testMsg) {if (testMsg != null) {Log.d("MainActivity", "你收到的名字為: "+testMsg.getName());}} 復制代碼

    如果你有三個接收事件,并且設置了不同的優先級,比如100、50、10,你也可以在priority = 100的接收到之后取消事件的傳遞,那么priority = 50和10的就不會接收到事件了。但是請注意,只能在ThreadMode.PostThread類型的才能取消,其他的三種ThreadMode類型是不能取消的。

    如何設置:

    EventBus.getDefault().cancelEventDelivery(event) ; 復制代碼

    4.定義事件發布者(Publisher)發出事件

    sendMessage.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {EventBus.getDefault().post(new TestMsg("測試EventBus"));}}); 復制代碼

    我寫了一個小Demo,這個Demo是我在主module,也就是在app下面定義了事件接收者,在主app依賴的module下面發出事件來測試的。結果是可行的。有興趣的小伙伴可以去看下:

    Demo地址

    你可以通過以下方式關注我:

  • CSDN
  • 掘金
  • 個人博客
  • 總結

    以上是生活随笔為你收集整理的Android基础 EventBus3 0实用教程的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。