189 8069 5689

EventBus的使用-创新互联

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

十余年的仙桃网站建设经验,针对设计、前端、开发、售后、文案、推广等六对一服务,响应快,48小时及时工作处理。全网整合营销推广的优势是能够根据用户设备显示端的尺寸不同,自动调整仙桃建站的显示方式,使网站能够适用不同显示终端,在浏览器中调整网站的宽度,无论在任何一种浏览器上浏览网站,都能展现优雅布局与设计,从而大程度地提升浏览体验。创新互联建站从事“仙桃网站设计”,“仙桃网站推广”以来,每个客户项目都认真落实执行。

基本的使用步骤就是如下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 的使用

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。


分享标题:EventBus的使用-创新互联
网站地址:http://cdxtjz.cn/article/dspegh.html

其他资讯