资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

EventBus的使用

eventbus和观察者是一样的,需要先导入eventbus的架包。

成都创新互联公司技术团队十载来致力于为客户提供网站设计、网站建设、高端网站设计成都营销网站建设、搜索引擎SEO优化等服务。经过多年发展,公司拥有经验丰富的技术团队,先后服务、推广了1000+网站,包括各类中小企业、企事单位、高校等机构单位。

基本的使用步骤就是如下4步,

  1. 定义事件类型:
    `public class MyEvent {}`

  2. 定义事件处理方法:
    `public void onEventMainThread`

  3. 注册订阅者:
    `EventBus.getDefault().register(this)`

  4. 发送事件:
    `EventBus.getDefault().post(new MyEvent())`


EventBus包含4个ThreadMode:PostThread,MainThread,BackgroundThread,Async

MainThread我们已经不陌生了;我们已经使用过。

具体的用法,极其简单,方法名为:onEventPostThread, onEventMainThread,onEventBackgroundThread,onEventAsync即可

具体什么区别呢?

onEventMainThread代表这个方法会在UI线程执行

onEventPostThread代表这个方法会在当前发布事件的线程执行

BackgroundThread这个方法,如果在非UI线程发布的事件,则直接执行,和发布在同一个线程中。如果在UI线程发布的事件,则加入后台任务队列,使用线程池一个接一个调用。

Async 加入后台任务队列,使用线程池调用,注意没有BackgroundThread中的一个接一个。


1、具体实现:

一个事件的基类

public class BaseEvent {
}

2、具体事件的类型

package com.example.mydemo;

public class FavorEvent extends BaseEvent {

    private int did;
    private String msg = "";

    public FavorEvent() {

    }

    public FavorEvent(int did, String msg) {
        this.did = did;
        this.setMsg(msg);
    }

    public int getDid() {
        return did;
    }

    public void setDid(int did) {
        this.did = did;
    }

    public String getMsg() {
        return msg;
    }

    public void setMsg(String msg) {
        this.msg = msg;
    }

    @Override
    public String toString() {
        return "FavorEvent [did=" + did + ", msg=" + msg + "]";
    }

}

3、注册eventbus事件,其中必须在写onEventPostThread, onEventMainThread,onEventBackgroundThread,onEventAsync其中一个方法,因为这是事件的回调,eventbus会自动检测是否类中存在四种方法中的其中一种。

package com.example.mydemo;

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

public class MainActivity extends Activity {

    private String TAG = "MainActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        EventBus.getDefault().register(this);
        findViewById(R.id.ttt).setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Intent intent = new Intent(MainActivity.this,
                        MainActivity2.class);
                // TODO Auto-generated method stub
                startActivity(intent);
            }
        });
    
    }

    public void onEventMainThread(FavorEvent event) {
        Log.e(TAG, "onEventMainThread" + "event=" + event.toString());
        ((TextView) findViewById(R.id.ttt)).setText("发布啦");

    }

    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub

        EventBus.getDefault().unregister(this);
        super.onDestroy();
    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.main, menu);
        return true;
    }

}

4、在MainActivity2类中通知类型为favorite类型的事件调用四种onEvent方法中的一种(我们已经在MainActivity类中写好了)

package com.example.mydemo;

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

public class MainActivity2 extends Activity {

    private String TAG = "MainActivity2";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main_activity2);

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

        findViewById(R.id.rrr).setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                Log.e(TAG, "onEventMainThread");//通知注册类型为FavorEvent的类调用回调       d      EventBus.getDefault().post(new FavorEvent(000, "nimeia"));

            }
        });
    }
}

点击MainActivity2中findViewById(R.id.rrr)的事件,log打印如下,说明调用成功

EventBus 的使用


新闻名称:EventBus的使用
标题URL:http://cdkjz.cn/article/poosgc.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220