Activity与Service通信之EventBus

原创 2016年06月01日 16:40:38
一、导包:
compile 'org.simple:androideventbus:1.0.5'
二、在Activity和Service分别注册EventBus
//注册EventBus
eventBus = EventBus.getDefault();
eventBus.register(this);
在onDestroy()注销EventBus
@Override
protected void onDestroy() {
super.onDestroy();
eventBus.unregister(this);
}
三、启动计时发消息:
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
timer = new Timer();
timer.schedule(new MyTimerTask(), 0, 1000);
return START_STICKY;
}

/**计时器*/
class MyTimerTask extends TimerTask {
@Override
public void run() {
Message message = handler.obtainMessage();
message.what = 21;
handler.sendMessage(message);
}
}
private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what){
case 21:
if (temp == 100){
temp = 0;
}else {
temp ++ ;
}
eventBus.post(temp,EVNET_TAG);
break;
}
}
};
三、核心代码:
Service:

import android.app.Service;
import android.content.Intent;
import android.os.Handler;
import android.os.IBinder;
import android.os.Message;
import android.support.annotation.Nullable;

import org.simple.eventbus.EventBus;

import java.util.Timer;
import java.util.TimerTask;

/**
* <h3>Description</h3>
* TODO
* <h3>Author</h3> luzhenbang
* <h3>Date</h3> 2016/6/1 9:44
* <h3>Copyright</h3> Copyright (c)2016 Shenzhen Tentinet Technology Co., Ltd. Inc. All rights reserved.
*/
public class EventService extends Service {

private int temp = 0;
public static final String EVNET_TAG = "EventService";

private Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what){
case 21:
if (temp == 100){
temp = 0;
}else {
temp ++ ;
}
eventBus.post(temp,EVNET_TAG);
break;
}
}
};

/** 计时器*/
private Timer timer;
private EventBus eventBus;


@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}


@Override
public void onCreate() {
super.onCreate();
eventBus = EventBus.getDefault();
eventBus.register(this);
}

@Override
public int onStartCommand(Intent intent, int flags, int startId) {
timer = new Timer();
timer.schedule(new MyTimerTask(), 0, 1000);
return START_STICKY;
}

/**计时器*/
class MyTimerTask extends TimerTask {
@Override
public void run() {
Message message = handler.obtainMessage();
message.what = 21;
handler.sendMessage(message);
}
}

@Override
public void onDestroy() {
super.onDestroy();
timer.cancel();
eventBus.unregister(this);
}
}
Activity:
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.TextView;
import org.simple.eventbus.EventBus;
import org.simple.eventbus.Subscriber;
import testndk.testservice.service.EventService;
public class EventActivity extends Activity {

private boolean mIsBind;
private Button startBtn = null;
private Button stopBtn = null;
private TextView mTextView = null;


private Intent intent = null;
private ProgressBar mProgressBar = null;

private Handler mHandler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what) {
case 21:
int curLoad = msg.arg1;
mTextView.setText(curLoad+"%");
mProgressBar.setProgress(curLoad);
break;

default:
break;
}
}
};
private EventBus eventBus;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//注册EventBus
eventBus = EventBus.getDefault();
eventBus.register(this);

intent = new Intent(this,EventService.class);
mProgressBar = (ProgressBar)findViewById(R.id.myProgressBar);
mProgressBar.setMax(100);
mTextView = (TextView)findViewById(R.id.loading_Tv);
startBtn = (Button)findViewById(R.id.start_Btn);
stopBtn = (Button)findViewById(R.id.stop_Btn);
startBtn.setOnClickListener(new ButtonClickListener());
stopBtn.setOnClickListener(new ButtonClickListener());

}


class ButtonClickListener implements OnClickListener {

@Override
public void onClick(View v) {
if (startBtn == v) {
startService(intent);
} else if (stopBtn == v) {
if(mIsBind){
stopService(intent);
mIsBind = false;
}
}
}
}

/**
* 接收服务端的数据
* @param temp
*/
@Subscriber(tag = EventService.EVNET_TAG)
private void getEventData(int temp){
Message message = mHandler.obtainMessage();
message.what = 21;
message.arg1 = temp;
mHandler.sendMessage(message);
}

@Override
protected void onDestroy() {
super.onDestroy();
eventBus.unregister(this);
}
}
注意:不要忘记在配置文件中注册服务。

源码下载地址:

http://download.csdn.net/detail/lu1024188315/9537991

效果图:


版权声明:请尊重劳动成果,转载请注明来处:Abang的博客 http://blog.csdn.net/lu1024188315,如果您有不同意见,请尽情留言

EventBus实现Activity与Service通信

现在有如下需要:在一个Service启动一个定时线程,每隔一段时间从网络上获取一张图片,并将获取的图片更新到ActivityUI上。(1)如果通过bindService()方法启动一个Service,...
  • qq_33022345
  • qq_33022345
  • 2016年10月17日 00:29
  • 1635

EventBus 详细使用教程[在Activity、Service、Receiver中Post]

添加EventBus compile 'de.greenrobot:eventbus:2.4.0'或 直接下载jar包 |点击下载 注册和注销EventBus @Override p...
  • yy1300326388
  • yy1300326388
  • 2015年05月22日 14:32
  • 6366

EventBus使用详解(一)——初步使用EventBus

前言:
  • harvic880925
  • harvic880925
  • 2014年10月31日 20:16
  • 353858

Android消息通信之无所不能的第三方开源项目EventBus

 Android消息通信之无所不能的第三方开源项目EventBus 在Android开发中,消息通信在开发过程中是比较重要但比较略微繁琐的过程,比如,Activity与Fragment之间的消...
  • zhangphil
  • zhangphil
  • 2015年10月26日 13:06
  • 1332

EventBus的使用与深入学习

注意:以下分析都是基于EventBus 3.0x 转载请注明出处:http://blog.csdn.net/evan_man 简单介绍     EventBus是一个用于简化Andorid、Fragm...
  • evan_man
  • evan_man
  • 2016年05月06日 09:17
  • 16754

android Service+EventBus实现异地登录提示

我是用retrofit做的网络接口,当异地登录时,errorbody信息是固定数据(不能用公司的,随便换个等效的){"error_state":1,"error_msg":"异地登录"}然后我想是每个...
  • yu_duan_hun
  • yu_duan_hun
  • 2017年12月08日 09:53
  • 110

Android EventBus实战 没听过你就out了

转载请表明出处:http://blog.csdn.net/lmj623565791/article/details/40794879,本文出自:【张鸿洋的博客】1、概述最近大家面试说经常被问到Even...
  • lmj623565791
  • lmj623565791
  • 2014年11月05日 17:21
  • 93415

Android EventBus实战

1、概述 最近大家面试说经常被问到EventBus,github上果断down了一份,地址:https://github.com/greenrobot/EventBus,的确是个不错的框架,主要用于...
  • jdsjlzx
  • jdsjlzx
  • 2014年11月06日 10:06
  • 14593

EventBus 详细使用教程[在Activity、Service、Receiver中Post],eventbusreceiver

1、添加EventBus     compile 'de.greenrobot:eventbus:2.4.0'          或下载相关对应的jar包 2、注册和注销EventBus...
  • u013245095
  • u013245095
  • 2016年06月07日 23:39
  • 1241

解决EventBus出现响应不了事件的问题

在做友盟完全自定义处理推送消息的时候,出现了一个问题,就是服务在继承UmengBaseIntentService的时候post EventBus时在activity怎么也接受不到消息,了解了一下Eve...
  • Andy_LTZ
  • Andy_LTZ
  • 2016年10月08日 17:27
  • 1585
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Activity与Service通信之EventBus
举报原因:
原因补充:

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