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
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...