EventBus后台发送消息到前台

原创 2015年11月18日 12:55:20

EventBus只能单向传递,但是该传递不会丢失信息。

导入EventBus工程,将其创建成Library,如图:


前台代码

package com.pangbao.myeventbus;

import de.greenrobot.event.EventBus;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;

public class MainActivity extends Activity implements OnClickListener {
	TextView tv = null;

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		tv = (TextView) findViewById(R.id.tv_id);

		Button btn = (Button) findViewById(R.id.button1);
		btn.setOnClickListener(this);

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

	@Override
	public void onClick(View v) {
		// 点击启动后台服务
		Intent service = new Intent(this, PangService.class);
		startService(service);
	}

	// 这里,EventBus回调接受消息,然后更新Main UI的TextView
	public void onEventMainThread(Comment event) {
		Log.d(this.getClass().getName(),
				"onEventMainThread:" + event.toString());

		tv.setText(event.str);
	}

	// EventBus回调接受消息
	public void onEventBackgroundThread(Comment event) {
		Log.d(this.getClass().getName(),
				"onEventBackgroundThread:" + event.toString());
	}

	// EventBus回调接受消息
	public void onEventAsync(Comment event) {
		Log.d(this.getClass().getName(), "onEventAsync:" + event.toString());
	}

}
后台代码
package com.pangbao.myeventbus;

import de.greenrobot.event.EventBus;
import android.app.Service;
import android.content.Intent;
import android.os.IBinder;

public class PangService extends Service {

	@Override
	public void onCreate() {
		// TODO Auto-generated method stub
		super.onCreate();
	}

	public void startEvent() {
		new Thread(new Runnable() {

			@Override
			public void run() {

				int id = 0;
				for (int i = 0; i < 100; i++) {
					Comment event = new Comment();
					event.str = "hollow," + id + "word";
					EventBus.getDefault().post(event);
					id++;
					try {
						Thread.sleep(2000);
					} catch (InterruptedException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			}
		}).start();
	}

	@Override
	public int onStartCommand(Intent intent, int flags, int startId) {
		// TODO Auto-generated method stub

		startEvent();

		return super.onStartCommand(intent, flags, startId);
	}

	@Override
	public IBinder onBind(Intent arg0) {
		// TODO Auto-generated method stub
		return null;
	}

}

接收数据类

package com.pangbao.myeventbus;

public class Comment {
	public int id;
	public String str;
	
	@Override
	public String toString() {
		return "Comment [str=" + str + "]";
	}
	
}

布局代码

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.pangbao.myeventbus.MainActivity" >

    <TextView
        android:id="@+id/tv_id"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/hello_world" />

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/tv_id"
        android:layout_marginTop="114dp"
        android:layout_toRightOf="@+id/tv_id"
        android:text="接收" />

</RelativeLayout>

记得最后在AndroidManif.xml中注册

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.pangbao.myeventbus"
    android:versionCode="1"
    android:versionName="1.0" >

    <uses-sdk
        android:minSdkVersion="14"
        android:targetSdkVersion="21" />

    <application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:theme="@style/AppTheme" >
        <activity
            android:name=".MainActivity"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
        <service android:name=".PangService"/>
    </application>

</manifest>


版权声明:本文为博主原创文章,未经博主允许不得转载。

EventBus---消息的发送与处理(二)

消息发送与处理二
  • rockstore
  • rockstore
  • 2015年12月18日 10:53
  • 1345

Android消息传递之EventBus 3.0使用详解

前言:     前面两篇不仅学习了子线程与UI主线程之间的通信方式,也学习了如何实现组件之间通信,基于前面的知识我们今天来分析一下EventBus是如何管理事件总线的,EventBus到底是不是最佳...
  • birthmarkqiqi
  • birthmarkqiqi
  • 2017年03月24日 16:15
  • 442

了解EventBus 3.0 (二)-发送事件

虽然我在这里写下Eventbus,但是,还是觉得老司机教你 “飙” EventBus 3 才是很完美的文章。 1. 我们能发送哪些事件 post发送普通事件 postSticky 发送粘性事件 粘性事...
  • qq_21430549
  • qq_21430549
  • 2016年10月15日 21:42
  • 1388

Android之利用EventBus进行消息传递

转自:http://blog.csdn.net/harvic880925/article/details/40660137 更详细请看原作者文章,感谢作者分享。 前言:EventBus是上周项目中...
  • qq_16628781
  • qq_16628781
  • 2017年01月13日 15:00
  • 486

安卓使用EventBus实现消息传递

什么是EventBus EventBus是一个 发布/订阅 模式的消息总线库,它简化了应用程序内各组件间、组件与后台线程间的通信,解耦了事件的发送者和接收者,避免了复杂的、易于出错的依赖及生命周...
  • dong_18383219470
  • dong_18383219470
  • 2017年02月09日 13:34
  • 606

EventBus消息总线机制

EventBus是Guava的事件处理机制,是设计模式中的观察者模式(生产/消费者编程模型)的优雅实现。对于事件监听和发布订阅模式,EventBus是一个非常优雅和简单解决方案,我们不用创建复杂的类和...
  • luoyinhan
  • luoyinhan
  • 2014年04月08日 23:40
  • 793

EventBus3.0,使用过程中所有的梗。

说到EventBus,想必大家都不陌生,咦~~~~你没听过,好吧,你还要认真学习啊,这篇博客不是去分析EventBus的源码的,也不是讲什么人生哲理,就是教大家如何使用这么一个神器,以后谁要是问你Ev...
  • u011077027
  • u011077027
  • 2016年08月17日 15:43
  • 4307

websocket+java+tomcat推送数据到前台

原地址:http://blog.chenzuhuang.com/archive/28.html 步骤: 1、新建html页面,代码如下 2、新建java类,代码如下 3、要求:Tomcat从7...
  • u011181882
  • u011181882
  • 2016年11月23日 20:37
  • 5830

android 消息传递机制EventBus的深入探究

以前,对于activity和fragment之间的通信可以使用接口的方式,定义起来比较麻烦费事,偶然间发现可以使用EventBus,发现很好用,查看了一下官方说明:EventBus是针一款对Andro...
  • lj188266
  • lj188266
  • 2017年04月18日 16:24
  • 1519

前台访问后台的几种方法

1、WebMethod public static方法,ajax/PageMethods调用。 test.cs [WebMethod] public static string GetUserNam...
  • pnf88
  • pnf88
  • 2013年12月05日 21:40
  • 3307
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:EventBus后台发送消息到前台
举报原因:
原因补充:

(最多只允许输入30个字)