• 【第二篇】学习 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 }
     
  • 相关阅读:
    Android中使用HttpURLConnection实现GET POST JSON数据与下载图片
    BZOJ 1293 SCOI2009 生日礼物 堆
    Git小玩
    VM tools安装错误The path "" is not a valid path to the xx generic kernel headers.
    css hover对其包括的元素进行样式设置
    C#高级编程---暂停计划
    如何配置和使用Tomcat访问日志
    关于性能测试应该知道的一些事(转载)
    Linux 平台如何查看某个进程的线程数?
    《让LoadRunner走下神坛》
  • 原文地址:https://www.cnblogs.com/androidsuperman/p/4632884.html
Copyright © 2020-2023  润新知