EventBus簡單的實現

来源:http://www.cnblogs.com/wangfengdange/archive/2016/09/14/5871046.html
-Advertisement-
Play Games

EventBus是最近項目用到的,也只是會些簡單的功能,不過感覺功能蠻強大的。代碼鏈接:http://download.csdn.net/detail/qq_29774291/9629346 EventBus是Guava的事件處理機制,是設計模式中的觀察者模式(生產/消費者編程模型)的優雅實現。主要 ...


EventBus是最近項目用到的,也只是會些簡單的功能,不過感覺功能蠻強大的。代碼鏈接:http://download.csdn.net/detail/qq_29774291/9629346

EventBus是Guava的事件處理機制,是設計模式中的觀察者模式(生產/消費者編程模型)的優雅實現。主要功能是替代Intent,Handler,BroadCast在Fragment,Activity,Service,線程之間傳遞消息.優點是開銷小,代碼更優雅。以及將發送者和接收者解耦。

一.下載的類庫:https://github.com/greenrobot/EventBus

二.基本的使用:

  1.在要接收消息的頁面註冊:

1 EventBus.getDefault().register(this);

  2.在發送界面發送消息:

Student student = new Student(20, "張三", "男");
EventBus.getDefault().post(student);

  3.在接受界面接受信息:

@Subscribe
    public void onMessageReviced(final Student Message) {
        //顯示一個彈窗
        System.out.println("收到消息dddx :" + Message);
        if(Message != null){
            showAlertDialog(this, "姓名:" + Message.getName() + "\\年齡:" + Message.getAge() + "\\性別:" +Message
                    .getSex());
        }
    }

  4.解除註冊:

        @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        EventBus.getDefault().unregister(this);
    }    

主程式代碼

 1 package com.item.jiejie.event;
 2 
 3 import de.greenrobot.event.EventBus;
 4 import de.greenrobot.event.Subscribe;
 5 import android.os.Bundle;
 6 import android.app.Activity;
 7 import android.app.AlertDialog;
 8 import android.content.Context;
 9 import android.content.DialogInterface;
10 import android.content.Intent;
11 import android.view.View;
12 import android.widget.Button;
13 import android.widget.TextView;
14 
15 public class MainActivity extends Activity {
16 
17     private TextView tv_View;
18     private Button btn_to_finish;
19 
20     @Override
21     protected void onCreate(Bundle savedInstanceState) {
22         super.onCreate(savedInstanceState);
23         setContentView(R.layout.activity_main);
24         setView();
25         EventBus.getDefault().register(this);
26     }
27     
28     @Override
29     protected void onDestroy() {
30         // TODO Auto-generated method stub
31         super.onDestroy();
32         EventBus.getDefault().unregister(this);
33     }
34     private void setView() {
35         // TODO Auto-generated method stub
36         tv_View = (TextView) findViewById(R.id.tv_text);
37         btn_to_finish = (Button) findViewById(R.id.btn_to_one);
38         btn_to_finish.setOnClickListener(new View.OnClickListener() {
39 
40             @Override
41             public void onClick(View arg0) {
42                 // TODO Auto-generated method stub
43                 startActivity(new Intent(MainActivity.this, OneActivity.class));
44             }
45         });
46     }
47     private boolean isShow = false;
48     @Override
49     protected void onStart() {
50         // TODO Auto-generated method stub
51         super.onStart();
52         isShow = true;
53     }
54     @Override
55     protected void onStop() {
56         // TODO Auto-generated method stub
57         super.onStop();
58         isShow =false;
59     }
60     @Subscribe
61     public void onMessageReviced(final String Message) {
62         tv_View.setText(Message);
63         System.out.println("收到消息ddd :" + Message);
64     }
65 
66     @Subscribe
67     public void onMessageReviced(final Student Message) {
68         //顯示一個彈窗
69         System.out.println("收到消息dddx :" + Message);
70         if(Message != null){
71             showAlertDialog(this, "姓名:" + Message.getName() + "\\年齡:" + Message.getAge() + "\\性別:" +Message
72                     .getSex());
73         }
74     }
75     private void showAlertDialog(final Context context,String string){
76         AlertDialog.Builder dialog = new AlertDialog.Builder(context);
77         dialog.setTitle("我是標題");
78         dialog.setMessage(string);
79         dialog.setPositiveButton("確定", new DialogInterface.OnClickListener() {
80             
81             @Override
82             public void onClick(DialogInterface arg0, int arg1) {
83                 // TODO Auto-generated method stub
84                 
85             }
86         });
87         AlertDialog mDialog = dialog.create();
88         mDialog.show();
89     }
90 }

 


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

-Advertisement-
Play Games
更多相關文章
  • 2、日期類型數值轉換 3、漂亮的隨機代碼 4、合併數組 5、用0補全位數 6、交換值 7、刪除數組元素 8、獲取最大值和最小值 9、拷貝數組 10、日常中true、false判斷 11、獲取今天的0點:0分:0秒和23點:59分:59秒 ...
  • 看CSS3時發現了一個nth-of-type選擇器,發現平時基本沒見過用,就研究了一下,w3c是這樣說明的: :nth-of-type(n) 選擇器匹配屬於父元素的特定類型的第 N 個子元素的每個元素. 看起來和nth-child很像 :nth-child(n) 選擇器匹配屬於其父元素的第 N 個子 ...
  • 原作:Getting started with jQuery Mobile —— Matthew David 翻譯:filod 譯文:http://blog.filod.net/jquerymobile-2/295.html 轉載聲明:請註明原作、翻譯以及譯文鏈接。 你每天都會對著它講話,和它玩游戲 ...
  • 之前看到一篇文章介紹到App之間的五種通信方式,它分別有URL Scheme,Keychain,UIPastedboard,UIDocumentInteractionController以及利用socket進行本地通信。前面4種都有用到過,也相對比較簡單,幾行代碼的事。對於最後一種之前一直沒用到過( ...
  • 當做一款APP,需要選擇本地圖片時,首先考慮的無疑是系統相冊,但是Android手機五花八門,再者手機像素的提升,大圖無法返回等異常因數,導致適配機型比較困難,微信、QQ都相繼的在自己的APP里集成了圖片選擇功能,放棄了系統提供的圖片選擇器,這裡仿造QQ做了一個本地圖片選擇器,PS:之前有人說"仿" ...
  • iOS10相冊相機閃退bughttp://www.jianshu.com/p/5085430b029fiOS 10 因蘋果健康導致閃退 crashhttp://www.jianshu.com/p/545bd1bf5a23麥克風、多媒體、地圖、通訊錄ios10相機等崩潰http://www.jians ...
  • swift字典 在swift中,key:key值一定是可hash的,一定是獨一無二的,swift的基本數據類型(String,Int,Float)都是可哈希的,所以都可以作為key值。 value:沒有要求 直接上代碼了,註釋給大家標的很明白 //創建字典並賦值 let dict = ["name" ...
  • 博客: Android 6.0 運行時許可權管理最佳實踐 github: https://github.com/yanzhenjie/AndPermission ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...