【第二篇】学习 android 事件总线androidEventbus之异步事件的传递

1,不同Activity直接发送Ansy的事件,以及其他任何事件,必须通过

postSticky方式来进行事件的传递,而不能通过post的形式来进行传递:EventBus.getDefault().postSticky(newUser("soyoungboy","西安财经学院"),
"soyoungboy");

2,接受到事件后,很有必要移除事件里面的内容,否则事件内容会多次叠加:EventBus.getDefault().removeStickyEvent(user.getClass(),"ansy") [貌似这个问题只出现在多个Activity之间的事件发送和接收有这问题,但是单个activity里面不会存在这个问题]
3,接收事件相应的时候:除了tag以外还要加上mode,mode =mode =ThreadMode.ASYNC.
4,当然tag可以不用设置,但是发送和接收必须统一,要么都加上,要么都不加。
下面是两个activity之间的ansy事件传递:
  1. package com.example.mysimpleeventbus;
    
    import org.simple.eventbus.EventBus;
    import org.simple.eventbus.Subscriber;
    import org.simple.eventbus.ThreadMode;
    
    import android.content.Intent;
    import android.os.Bundle;
    import android.support.v7.app.ActionBarActivity;
    import android.util.Log;
    import android.view.View;
    import android.view.View.OnClickListener;
    import android.widget.Button;
    
    public class MainActivity extends ActionBarActivity implements OnClickListener {
    
        private Button button;
        private Button ansyBtn;
        private Button ansy1Btn;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            initView();
            // 1 首先注册事件总线
            EventBus.getDefault().register(this);
        }
    
        private void initView() {
            button = (Button) findViewById(R.id.button);
            ansyBtn = (Button) findViewById(R.id.ansyBtn);
            ansy1Btn = (Button) findViewById(R.id.ansy1Btn);
    
            button.setOnClickListener(this);
            ansyBtn.setOnClickListener(this);
            ansy1Btn.setOnClickListener(this);
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            EventBus.getDefault().unregister(this);
        }
    
        @Override
        public void onClick(View view) {
            switch (view.getId()) {
            case R.id.button:
    
                postSticky();
    
                break;
    
            case R.id.ansyBtn:
    
                postAnsy();
    
                break;
            case R.id.ansy1Btn:
                
                postAnsyInMainActivity();
                
                break;
            default:
                break;
            }
        }
    
        /**
         * Ansy事件传递,多个Activity之间必须postSticky
         */
        private void postAnsy() {
            // 将目标函数执行在异步线程中
            EventBus.getDefault().postSticky(new User("soyoungboy", "西安财经学院"),
                    "ansy");
            gotoOtherActivity();
        }
    
        /**
         * 在本Activity中进行Ansy事件发布操作
         */
        private void postAnsyInMainActivity() {
            EventBus.getDefault().post(new User("soyoungboy", "西安财经学院"), "ansy");
        }
    
        /**
         * 在本Activity中进行Ansy事件接受操作
         * 
         * @param user
         */
        @Subscriber(tag = "ansy", mode = ThreadMode.ASYNC)
        private void ansy(User user) {
            Log.i("user", user.toString());
            Log.i("ThreadName", Thread.currentThread().getName());
        }
    
        private void postSticky() {
            // 2 发送Sticky事件
            EventBus.getDefault().postSticky(new User("soyoungboy", "西安财经学院"),
                    "soyoungboy");
    
            gotoOtherActivity();
        }
    
        private void gotoOtherActivity() {
            // 跳转页面
            Intent intent = new Intent(MainActivity.this, OtherActivity.class);
            startActivity(intent);
        }
    }

     


 
OtherActivity.java
  1.  1 package com.example.mysimpleeventbus;
     2 
     3 import org.simple.eventbus.EventBus;
     4 import org.simple.eventbus.Subscriber;
     5 import org.simple.eventbus.ThreadMode;
     6 
     7 import android.app.Activity;
     8 import android.os.Bundle;
     9 import android.util.Log;
    10 import android.widget.Toast;
    11 
    12 public class OtherActivity extends Activity {
    13     @Override
    14     protected void onCreate(Bundle savedInstanceState) {
    15         // TODO Auto-generated method stub
    16         super.onCreate(savedInstanceState);
    17         setContentView(R.layout.activity_main);
    18         // 注意此处的registerSticky而不是register
    19         EventBus.getDefault().registerSticky(this);
    20     }
    21 
    22     // 此处获取发送事件的内容
    23     @Subscriber(tag = "soyoungboy")
    24     void showToast(User user) {
    25         Toast.makeText(OtherActivity.this, user.toString(), Toast.LENGTH_LONG)
    26                 .show();
    27     }
    28 
    29     // 获取Ansy异步事件的内容
    30     @Subscriber(tag = "ansy",mode = ThreadMode.ASYNC)
    31     private void ansy(User user) {
    32         Log.i("user", user.toString());
    33         Log.i("ThreadName", Thread.currentThread().getName());
    34         //删除事件,否则会出现重复的响应事件
    35         EventBus.getDefault().removeStickyEvent(user.getClass(), "ansy");
    36     }
    37 
    38     @Override
    39     protected void onDestroy() {
    40         super.onDestroy();
    41         // 同样需要unregister
    42         EventBus.getDefault().unregister(this);
    43     }
    44 }

     



同一个activity内部的内容传递,事件内容不会多次叠加,所以无需删除的操作:
  1 package com.example.mysimpleeventbus;
  2 
  3 import org.simple.eventbus.EventBus;
  4 import org.simple.eventbus.Subscriber;
  5 import org.simple.eventbus.ThreadMode;
  6 
  7 import android.content.Intent;
  8 import android.os.Bundle;
  9 import android.support.v7.app.ActionBarActivity;
 10 import android.util.Log;
 11 import android.view.View;
 12 import android.view.View.OnClickListener;
 13 import android.widget.Button;
 14 
 15 public class MainActivity extends ActionBarActivity implements OnClickListener {
 16 
 17     private Button button;
 18     private Button ansyBtn;
 19     private Button ansy1Btn;
 20 
 21     @Override
 22     protected void onCreate(Bundle savedInstanceState) {
 23         super.onCreate(savedInstanceState);
 24         setContentView(R.layout.activity_main);
 25         initView();
 26         // 1 首先注册事件总线
 27         EventBus.getDefault().register(this);
 28     }
 29 
 30     private void initView() {
 31         button = (Button) findViewById(R.id.button);
 32         ansyBtn = (Button) findViewById(R.id.ansyBtn);
 33         ansy1Btn = (Button) findViewById(R.id.ansy1Btn);
 34 
 35         button.setOnClickListener(this);
 36         ansyBtn.setOnClickListener(this);
 37         ansy1Btn.setOnClickListener(this);
 38     }
 39 
 40     @Override
 41     protected void onDestroy() {
 42         super.onDestroy();
 43         EventBus.getDefault().unregister(this);
 44     }
 45 
 46     @Override
 47     public void onClick(View view) {
 48         switch (view.getId()) {
 49         case R.id.button:
 50 
 51             postSticky();
 52 
 53             break;
 54 
 55         case R.id.ansyBtn:
 56 
 57             postAnsy();
 58 
 59             break;
 60         case R.id.ansy1Btn:
 61             
 62             postAnsyInMainActivity();
 63             
 64             break;
 65         default:
 66             break;
 67         }
 68     }
 69 
 70     /**
 71      * Ansy事件传递,多个Activity之间必须postSticky
 72      */
 73     private void postAnsy() {
 74         // 将目标函数执行在异步线程中
 75         EventBus.getDefault().postSticky(new User("soyoungboy", "西安财经学院"),
 76                 "ansy");
 77         gotoOtherActivity();
 78     }
 79 
 80     /**
 81      * 在本Activity中进行Ansy事件发布操作
 82      */
 83     private void postAnsyInMainActivity() {
 84         EventBus.getDefault().post(new User("soyoungboy", "西安财经学院"), "ansy");
 85     }
 86 
 87     /**
 88      * 在本Activity中进行Ansy事件接受操作
 89      * 
 90      * @param user
 91      */
 92     @Subscriber(tag = "ansy", mode = ThreadMode.ASYNC)
 93     private void ansy(User user) {
 94         Log.i("user", user.toString());
 95         Log.i("ThreadName", Thread.currentThread().getName());
 96     }
 97 
 98     private void postSticky() {
 99         // 2 发送Sticky事件
100         EventBus.getDefault().postSticky(new User("soyoungboy", "西安财经学院"),
101                 "soyoungboy");
102 
103         gotoOtherActivity();
104     }
105 
106     private void gotoOtherActivity() {
107         // 跳转页面
108         Intent intent = new Intent(MainActivity.this, OtherActivity.class);
109         startActivity(intent);
110     }
111 }

 

 
posted @ 2015-07-09 13:14  西北野狼  阅读(1147)  评论(0编辑  收藏  举报