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>


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

相关文章推荐

JavaWeb后台自动向前台发送消息

  • 2014年07月09日 10:12
  • 105KB
  • 下载

E语言QQ后台发送消息

  • 2012年04月03日 17:17
  • 2KB
  • 下载

Android5.1FM模块学习----向前台发送消息

FM 前后台交互

eventbus发送消息刷新上一页listview 消息接收不到及返回上一页时数组角标越界

Android开发已第二个年头,此前从未有做笔记的习惯,想想甚是不对,知识再易亦是知识,问题再简亦是问题,而往往越简单越容易遗忘,他日再遇虽谷歌百度终能化解,但怎敌相逢一笑识故人,好记性不如烂笔头,愿...

微信实验六、微信PHP后台验证、接收和发送消息及源码下载

一、实验目的 1、掌握微信开发PHP后台验证、接收和发送消息。 二、实验内容 1、验证代码解析。 2、接收和发送消息解析。 三、实验步骤及过程 只有当微信服务器验证了应用服务器后台PHP的有效性...

如何快速制作脚本,不用插件也能用按键精灵后台发送消息

来源:按键学院   【按键精灵】 今天给大家带来了一个API哦,不用插件,也能实现后台发送消息。通过调用API,把字符串分割成一个一个字符,发送到目标窗口。快看看,API的秘密宝剑吧~~   A...

Android 中即时聊天或者后台任务需要发送消息的一种解决方案.

在即时聊天中可能会存在一个隐藏的Bug,这个Bug根据手机的网速和性能有关系,比如你即时聊天中,你发送一消息,你的网络情况不是很好,这个时候你发送的消息一直处于发送状态,然后你不想看了,就按退出,这个...

ActiveMQ(二)———使用Topic来发送消息

摘要:每个消息可以有多个消费者,发布者和订阅者之间有时间上的依赖性。针对某个主题(Topic)的订阅者,它必须创建一个订阅者之后,才能消费发布者的消息,而且为了消费消息,订阅者必须保持运行的状态。为了...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:EventBus后台发送消息到前台
举报原因:
原因补充:

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