greenrobot-EventBus,guava-Event Bus的异步实现

刚開始是从otto入手,可是otto不支持异步运行。所以后来才開始研究了Event Bus。关于Event Bus,先前搜索的时候,看到网上的实例,非常碎,并且非常多都是一样的内容,代码看下来基本上是分2套写法。这就带来了疑问。后来再细致浏览原先的帖子发现了Event Bus有2套源代码。一个是greenrobot的Event Bus,一个是google的guava Event Bus。今天谈论的并非2套Event Bus的原理以及不同之处,这些内容基本在网上都有參考,临时不在这里累赘介绍了。等有时间深入研究的时候能够再写一遍具体的Event Bus的介绍。这次基本的是介绍2套Event Bus的异步实现,网上中文页面搜索基本非常少有Event Bus异步的介绍,有的话也是非常easy的代码实例,并且仅仅有抛事件的代码,尝试过后都是失败的,最后都是在外文站点上搜索到了关键的代码,好了不废话。直接上代码。

首先介绍的是greenrobot Event Bus


package com.benny.test;


import java.util.ArrayList;
import java.util.List;


import android.app.Activity;
import android.graphics.Color;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.LinearLayout.LayoutParams;
import android.widget.TextView;
import de.greenrobot.event.EventBus;


public class MyEventByusTestActivity extends Activity implements OnClickListener {

private EventBus eventBus = EventBus.getDefault();
private LinearLayout viewGroup;

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        viewGroup = (LinearLayout)findViewById(R.id.main_layout);

// button设置响应接口
        findViewById(R.id.postthread).setOnClickListener(this);
        findViewById(R.id.mainthread).setOnClickListener(this);
        findViewById(R.id.backgroundthread).setOnClickListener(this);
        findViewById(R.id.async).setOnClickListener(this);
    }


@Override
protected void onPause() {
super.onPause();

// 注销事件响应
eventBus.unregister(this);
}


@Override
protected void onResume() {
super.onResume();

// 注冊事件响应
eventBus.register(this);
}


@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.postthread:

// 抛出PostThread模式的LoadButtonEvent事件
eventBus.post(loadButtonList("postthread", 30));
break;
case R.id.mainthread:

// 抛出MainThread模式的LoadLineEvent事件
eventBus.post(loadLineList(20));
break;
case R.id.backgroundthread:

// 抛出BackgroundThread模式的LoadNoneEvent事件
eventBus.post(new LoadNoneEvent());
break;
case R.id.async:

// 抛出Async模式的LoadAsyEvent事件
eventBus.post(new LoadAsyEvent());
break;
default:
break;
}
}
    
public LoadEvent loadTextList(String str, int num) {
ArrayList list = new ArrayList(num);
for (int i = 0; i < num; i++) {
TextView textView = new TextView(this);
textView.setText(str + i);
list.add(textView);
}
return new LoadEvent(list);
}

public LoadLineEvent loadLineList(int num) {
ArrayList list = new ArrayList();
for (int i = 0; i < num; i++) {
View view = new View(this);
view.setBackgroundColor(Color.BLUE);
list.add(view);
}
return new LoadLineEvent(list);
}

public LoadButtonEvent loadButtonList(String str, int num) {
ArrayList

你可能感兴趣的:(greenrobot-EventBus,guava-Event Bus的异步实现)