EventBus

来源:http://www.cnblogs.com/ganchuanpu/archive/2016/11/13/6058040.html
-Advertisement-
Play Games

1、簡介 EventBus是一個Android端優化的publish/subscribe消息匯流排,簡化了應用程式內各組件間、組件與後臺線程間的通信。比如請求網路,等網路返回時通過Handler或Broadcast通知UI,兩個Fragment之間需要通過Listener通信,這些需求都可以通過Eve ...


1、簡介
  EventBus是一個Android端優化的publish/subscribe消息匯流排,簡化了應用程式內各組件間、組件與後臺線程間的通信。比如請求網路,等網路返回時通過Handler或Broadcast通知UI,兩個Fragment之間需要通過Listener通信,這些需求都可以通過EventBus實現。
eventbus原理框圖.png

 


2、下載地址
https://github.com/greenrobot/EventBus


3使用步驟
1)添加jar包到libs文件夾下

2)註冊
EventBus.getDefault().register(this);

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

3)解註冊
EventBus.getDefault().unregister(this);

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

4)構造發送消息類

public class MessageEvent {
    public String name;
    public String password;

    public MessageEvent(String name, String password) {
        this.name = name;
        this.password = password;
    }
}

5)發佈消息
EventBus.getDefault().post(new MessageEvent("dahaige","123456"));
6)接收消息
ThreadMode.MAIN 表示這個方法在主線程中執行
ThreadMode.BACKGROUND 表示該方法在後臺執行,不能併發處理
ThreadMode.ASYNC 也表示在後臺執行,可以非同步併發處理。
ThreadMode.POSTING 表示該方法和消息發送方在同一個線程中執行

@Subscribe(threadMode = ThreadMode.MAIN)
public void messageEventBus(MessageEvent event){
	tv_result.setText("name:"+event.name+" passwrod:"+event.password);
}


4、粘性事件
之前說的使用方法, 都是需要先註冊(register), 再post,才能接受到事件;
如果你使用postSticky發送事件, 那麼可以不需要先註冊, 也能接受到事件.
1)構造發送信息類

public class StickyEvent {
    public String msg;

    public StickyEvent(String msg) {
        this.msg = msg;
    }
}


2)發佈消息
EventBus.getDefault().postSticky(new StickyEvent("我是粘性事件"));
3)接收消息

//註意,和之前的方法一樣,只是多了一個 sticky = true 的屬性.
@Subscribe(threadMode = ThreadMode.MAIN, sticky = true)
public void onEvent(StickyEvent event){
	tv_c_result.setText(event.msg);
}

4)註冊
EventBus.getDefault().register(CActivity.this);

 // 接收粘性事件數據按鈕的點擊事件處理
bt_eventbus_send_sticky.setOnClickListener(new View.OnClickListener() {
	@Override
	public void onClick(View v) {
		if(isFirstFlag) {
			isFirstFlag = false;
			// 4 註冊
			EventBus.getDefault().register(EventBusSendActivity.this);
		}
	}
});


5)解註冊

EventBus.getDefault().removeAllStickyEvents();
EventBus.getDefault().unregister(CActivity.class);

  


5、例子
1)主線程發送消息
2)發送粘性事件


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Nuget的VS 指令 1.安裝指定版本類庫install-package unity -version 3.5.14 2.安裝到指定的項目install-package unity -project XXXProjectName -version 3.5.14 3.重新安裝所有Nuget包(整個解 ...
  • 在博客園裡看到了好多關於文本框和密碼框水印效果的文章,今天有空也來實現一把,最終效果圖如下: 文本框的話,稍微好一點直接可以綁定它的Text屬性,因為他是個依賴屬性,我用了二種方式來實現水印效果:觸發器和數據綁定的形式; 一、觸發器方式: 二、數據綁定方式 密碼框的水印效果就稍微麻煩一點了,因為這個 ...
  • 【C#Windows 服務】 《三》Time設置 目錄: 1.【C#Windows 服務】 《一》初入門 2.【C#Windows 服務】 《二》INI配置文件 3.【C#Windows 服務】 《三》Timer設置 一、工具: VS2015+NET Framework4.5。 二、操作: 1、計時 ...
  • 一個值類型永遠不可能為null,但是當資料庫中的某列數據允許為空時,或者另一種語言中的數據類型(引用類型)對應C 的是值類型,當需要和另外的語言交互時,就有可能需要處理空值的問題。所以,CLR中引用了可空類型 。 空接合操作符 表示如果操作符左邊的數不為null就返回該操作數,否則返回右邊的操作符。 ...
  • 在通過Visual Studio創建的C 程式集中,都包含了一個AssemblyInfo.cs的文件,在這個文件中,我們常常會看到這樣的代碼 從這些代碼及他們的註釋中,我們大概知道他們是用來描述程式集的相關信息,那麼是不是我們平常寫的代碼中的類、類成員是不是也有這樣的附加信息呢?答案是肯定的。比如最 ...
  • 學習一種知識,我喜歡看看源碼是怎麼進行它們類之間的關係以及方法的調用,是怎麼實現的。這樣我才感覺踏實。 既然現在談到HandlerMapping,我們先知道HandlerMapping的作用:HandlerMapping的作用就是解析請求鏈接,然後根據請求鏈接找到執行這個請求的類(HandlerMa ...
  • 這是繼上次svn 客戶端與伺服器安裝後的如何在Eclipse 環境下線上安裝 SVN插件,我的Eclipse版本是4.50 SVN的線上安裝 下麵為大家提供SVN 的線上安裝教程。下麵是安裝的 詳細過程: 1.打開Eclipse的help的Install New Software 其中http:// ...
  • ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...