Android消息通信 第三方开源项目EventBus 的用法

EventBus是github上的一个第三方开发库,其在github上的项目主页地址:https://github.com/greenrobot/EventBus
EventBus的消息模型是消息发布者/订阅者机制。

(1)EventBus是消息发布者(发送消息)/订阅者(接收消息)模式。EventBus的消息发布十分灵活,可以在工程代码中的任意位置发送消息,EventBus 发布消息只需要一行代码即可实现: EventBus.getDefault().post(event); Event即为自己定义的类的实例。

(2)EventBus在接收消息的Activity(或Fragment)中初始化。通常在Android的Activity(或者Fragment)的onCreate里面注册,仅需一行代码: EventBus.getDefault().register(this); 类似于注册一个消息监听Listener,完了不要忘记注销EventBus,在onDestory里面 EventBus.getDefault().unregister(this);

(3)EventBus接收消息。 在Activity中根据代码实际情况写一个EventBus的消息接收函数: public void onEventMainThread(MyEvent event); 然后,只要EventBus发送消息,就可以在这里接收到。

EventBus的消息回调接收消息函数还有几个: onEventMainThread:Main线程,这个与Android UI线程密切相关,不要阻塞它! onEventBackgroundThread:故名思议,后台线程中接收处理。 onEventAsync:异步线程中接收处理。

 1 package com.lixu.chuandi;
 2
 3 import android.app.Activity;
 4 import android.content.Intent;
 5 import android.os.Bundle;
 6 import android.view.View;
 7 import android.view.View.OnClickListener;
 8 import android.widget.Button;
 9 import android.widget.TextView;
10 import de.greenrobot.event.EventBus;
11
12 public class MainActivity extends Activity {
13     TextView tv;
14
15     @Override
16     protected void onCreate(Bundle savedInstanceState) {
17         super.onCreate(savedInstanceState);
18         setContentView(R.layout.activity_main);
19         tv = (TextView) findViewById(R.id.tv1);
20         Button button = (Button) findViewById(R.id.btn1);
21         EventBus.getDefault().register(this);
22         button.setOnClickListener(new OnClickListener() {
23
24             @Override
25             public void onClick(View v) {
26                 Event event = new Event();
27                 event.a = "你好啊 我是:";
28                 event.b = "小新";
29
30                 EventBus.getDefault().post(event);
31                 Intent intent = new Intent(MainActivity.this, MyAppService.class);
32                 startService(intent);
33
34             }
35         });
36
37     }
38
39     // 这里,EventBus回调接受消息,然后更新Main UI的TextView
40     public void onEventMainThread(Event event) {
41
42         tv.setText(event.toString());
43     }
44
45     @Override
46     protected void onDestroy() {
47
48         super.onDestroy();
49         EventBus.getDefault().unregister(this);
50         Intent intent = new Intent(MainActivity.this, MyAppService.class);
51         stopService(intent);
52     }
53 }
 1 package com.lixu.chuandi;
 2
 3 import android.app.Service;
 4 import android.content.Intent;
 5 import android.os.IBinder;
 6 import android.util.Log;
 7 import de.greenrobot.event.EventBus;
 8
 9 public class MyAppService extends Service {
10     @Override
11     public void onCreate() {
12         super.onCreate();
13         EventBus.getDefault().register(this);
14     }
15
16     @Override
17     public int onStartCommand(Intent intent, int flags, int startId) {
18         Event event = new Event();
19         // 可以随意在工程中的任意位置发送消息给接受者
20         EventBus.getDefault().post(event.toString());
21         return super.onStartCommand(intent, flags, startId);
22     }
23
24     @Override
25     public IBinder onBind(Intent intent) {
26         return null;
27     }
28
29     // 在后台中接收消息
30     public void onEventBackgroundThread(Event event) {
31
32         Log.e("MyAppService收到消息:", event.toString());
33     }
34 }
 1 package com.lixu.chuandi;
 2
 3 public class Event {
 4     public String a;
 5     public String b;
 6     @Override
 7     public String toString() {
 8         return a+b;
 9     }
10
11 }
时间: 2024-10-15 00:17:27

Android消息通信 第三方开源项目EventBus 的用法的相关文章

Android 简化应用程序组件(Activity、Fragment、线程)间通信的开源项目 EventBus

项目地址:https://github.com/greenrobot/EventBus/ 项目使用的技术呢,说白了,就是将要传递的event(一个Object对象,可任意自定义),发送到公共的组件EventBus中进行存储, 在通过EventBus传递给订阅者(使用者),订阅者收到event消息,就可以自行处理了. 不要被标题迷惑了,其实在任何地方 都可以发送和接收event(event,是一个通称,表示任意的数据对象,是一个消息类型). 当然有需要注意的地方了,往下看吧. 分析一个基本的使用流

Android二维码开源项目zxing用例简化和生成二维码、条形码

上一篇讲到:Android二维码开源项目zxing编译,编译出来后有一个自带的测试程序:CaptureActivity比较复杂,我只要是把一些不用的东西去掉,用看起来更方便,二维码和条形码的流行性自不必说了. 自带的例子,目录结构如下: 修改后的程序目录结构,去掉了很多功能,如果分享.设置等. 先上效果图          扫描ZXing生成的条形码和二维码结果 扫描界面 扫描商品的条码 整个程序只修改了以下两个类,其它都是直接从原来的Demo中复制出来的 生成二维码的代码 /** * 生成二维

再看知名应用背后的第三方开源项目【转】

转自:http://blog.csdn.net/guojin08/article/details/42222637 http://www.cocoachina.com/iOS/20141017/9955.html iOS第三方开源库的吐槽和备忘>中作者ibireme列举了国内多款知名应用所使用的开源框架,并对其中一些框架进行了分析,同样国外开发者@iOSCowboy也在博客中给我们列出了国外多款知名应用使用的开源框架.另外txx's blog中详细介绍了Facebook Paper使用的第三方库

Android开发 详解开源项目CircleImageView

之前的项目中在需要显示圆形头像的地方,使用到了Github上的优秀开源项目CircleImageView https://github.com/hdodenhof/CircleImageView 今天仔细地研究了这个项目,学习其原理,收获不少. 源码主要分为下面这几大部分 取图片Bitmap 取自定义属性 创建Paint画笔 计算内外圆半径 Canvas绘制内外圆形 一.取图片Bitmap CircleImageView继承自ImageView 重写了下面几个方法 @Override publi

Android Studio下运行开源项目9GAG遇到的问题

首先是本地的build-tools版本不是开源项目所使用的,本来Android Studio点击出错提示会自动下载的,但是天朝把google的所有链接都封了,所以你懂的-- 于是到CSDN下载了21.1.1的版本,解压后,文件夹名称换成版本号21.1.1,放到如下路径(具体视各人的安装路径不同而不同) 之后又遇到一个问题,说是Gradle的版本不够新,找了一圈怎么升级Android Studio下Gradle的方法,终于让我找到 此后会等待比较长的一段时间,出现以下信息表示安装成功 之后再运行9

gitHub上边android studio开发的开源项目转为Eclipse中的项目,个人调试过的可以使用

一.ListView android-pulltorefresh 一个强大的拉动刷新开源项目,支持各种控件下拉刷新 ListView.ViewPager.WevView.ExpandableListView.GridView.(Horizontal )ScrollView.Fragment上下左右拉动刷新,比下面johannilsson那个只支持ListView的强大的多.并且他实现的下拉刷新ListView在item不足一屏情况下也不会显示刷新提示,体验更好. 项目地址:http://down

【转自红鱼儿】推荐内置android控件的开源项目alcinoe

开源地址:https://github.com/Zeus64/alcinoe 该控件包,含以下几个控件: 1.基于OpenGL实现的视频播放器 ALVideoPlayer. ALVideoPlayer将一个视频绘制到一个TEXTURE.可以将视频完全集成到delphi form中,并且可以将任何需要的控件放在顶部,因为它支持Z-ORDER.官方的delphi视频播放器只是form顶部的原生视频播放器窗口,因此不支持Z-ORDER. 在android下作者使用ExoPlayer.ExoPlayer

使用Android Studio导入第三方库项目

在使用Android Studio开发时,用到了第三方库SlidingMenu(现在已经不推荐使用了),尽管如此,但具体怎么导入第三方库还是需要知道的,在查阅各种资料后,知道了一种比较容易可行的方法 具体步骤如下 1.首先,需要从GitHub上下载去SlidingMenu (https://github.com/jfeinstein10/SlidingMenu) 2.接下来在你的项目上右击New->Module(这样避免了修改gradle的繁琐步骤),然后选择Android Library 3.

知名应用背后的第三方开源项目

Instagram AFNetworking: 适用于iOS和OS X的网络框架. Appirater: 提醒用户打分. ASIHTTPRequest:简单使用CFNetwork API封装进行HTTP网络请求,用Objective-C编写,可应用在Mac OSX和iOS开发中. CocoaHTTPServer: 用于Mac OS X和iOS应用程序的轻量级.可嵌入的HTTP服务器框架. Cocoa Lumberjack:适用于Mac和iOS的日志框架,集简单.快速.强大以及灵活于一身. M