【第四篇】学习 android 事件总线androidEventbus之发布事件,子线程中接收
2023-09-14 08:59:01 时间
发送和接收消息的方式类似其他的发送和接收消息的事件总线一样,不同的点或者应该注意的地方:
1,比如在子线程构造方法里面进行实现总线的注册操作;
2,要想子线程中接收消息的功能执行,必须启动线程。
3,添加tag和不添加tag类似其他。
1 package com.example.mysimpleeventbus; 2 3 import java.util.ArrayList; 4 import java.util.List; 5 6 import org.simple.eventbus.EventBus; 7 import org.simple.eventbus.Subscriber; 8 import org.simple.eventbus.ThreadMode; 9 10 import android.content.Intent; 11 import android.os.Bundle; 12 import android.support.v7.app.ActionBarActivity; 13 import android.util.Log; 14 import android.view.View; 15 import android.view.View.OnClickListener; 16 import android.widget.Button; 17 import android.widget.Toast; 18 19 public class MainActivity extends ActionBarActivity implements OnClickListener { 20 21 private Button button; 22 private Button ansyBtn; 23 private Button ansy1Btn; 24 private Button sendListBtn; 25 private Button sendToThreadBtn; 26 27 @Override 28 protected void onCreate(Bundle savedInstanceState) { 29 super.onCreate(savedInstanceState); 30 setContentView(R.layout.activity_main); 31 initView(); 32 // 1 首先注册事件总线 33 EventBus.getDefault().register(this); 34 MyThread myThread = new MyThread(); 35 myThread.start(); 36 } 37 38 private void initView() { 39 button = (Button) findViewById(R.id.button); 40 ansyBtn = (Button) findViewById(R.id.ansyBtn); 41 ansy1Btn = (Button) findViewById(R.id.ansy1Btn); 42 sendListBtn = (Button) findViewById(R.id.sendListBtn); 43 sendToThreadBtn = (Button) findViewById(R.id.sendToThreadBtn); 44 45 button.setOnClickListener(this); 46 ansyBtn.setOnClickListener(this); 47 ansy1Btn.setOnClickListener(this); 48 sendListBtn.setOnClickListener(this); 49 sendToThreadBtn.setOnClickListener(this); 50 } 51 52 @Override 53 protected void onDestroy() { 54 super.onDestroy(); 55 EventBus.getDefault().unregister(this); 56 } 57 58 @Override 59 public void onClick(View view) { 60 switch (view.getId()) { 61 case R.id.button: 62 63 postSticky(); 64 65 break; 66 67 case R.id.ansyBtn: 68 69 postAnsy(); 70 71 break; 72 case R.id.ansy1Btn: 73 74 postAnsyInMainActivity(); 75 76 break; 77 case R.id.sendListBtn: 78 79 // postListDate(); 80 postListToOtherActivity(); 81 break; 82 case R.id.sendToThreadBtn: 83 84 postToThread(); 85 86 break; 87 default: 88 break; 89 } 90 } 91 92 /** 93 * 发送事件总线到线程里面去接收 94 */ 95 private void postToThread() { 96 EventBus.getDefault().post(new User("soyoungboy", "西安财经学院"),"thread"); 97 } 98 99 class MyThread extends Thread{ 100 101 public MyThread() { 102 EventBus.getDefault().register(this); 103 } 104 105 /** 106 * 接收其他线程发来的消息 107 * @param user 108 */ 109 @Subscriber(tag = "thread") 110 private void receiveUser(User user) { 111 Log.i("thread --thread == ", user.toString()); 112 } 113 @Override 114 public void run() { 115 super.run(); 116 } 117 } 118 119 private void postListToOtherActivity() { 120 List<User> users = new ArrayList<User>(); 121 User user; 122 for (int i = 0; i < 10; i++) { 123 user = new User("帅哥" + i, "清华大学"); 124 users.add(user); 125 } 126 127 EventBus.getDefault().postSticky(users); 128 gotoOtherActivity(); 129 } 130 131 /** 132 * List数据的传递 133 */ 134 private void postListDate() { 135 List<User> users = new ArrayList<User>(); 136 User user; 137 for (int i = 0; i < 10; i++) { 138 user = new User("帅哥" + i, "清华大学"); 139 users.add(user); 140 } 141 142 EventBus.getDefault().post(users); 143 } 144 145 @Subscriber 146 private void reveiveList(List<User> users) { 147 for (int i = 0; i < users.size(); i++) { 148 Toast.makeText(getApplicationContext(), users.get(i).toString(), 149 Toast.LENGTH_SHORT).show(); 150 } 151 } 152 153 /** 154 * Ansy事件传递,多个Activity之间必须postSticky 155 */ 156 private void postAnsy() { 157 // 将目标函数执行在异步线程中 158 EventBus.getDefault().postSticky(new User("soyoungboy", "西安财经学院"), 159 "ansy"); 160 gotoOtherActivity(); 161 } 162 163 /** 164 * 在本Activity中进行Ansy事件发布操作 165 */ 166 private void postAnsyInMainActivity() { 167 EventBus.getDefault().post(new User("soyoungboy", "西安财经学院"), "ansy"); 168 } 169 170 /** 171 * 在本Activity中进行Ansy事件接受操作 172 * 173 * @param user 174 */ 175 @Subscriber(tag = "ansy", mode = ThreadMode.ASYNC) 176 private void ansy(User user) { 177 Log.i("user", user.toString()); 178 Log.i("ThreadName", Thread.currentThread().getName()); 179 } 180 181 private void postSticky() { 182 // 2 发送Sticky事件 183 EventBus.getDefault().postSticky(new User("soyoungboy", "西安财经学院"), 184 "soyoungboy"); 185 186 gotoOtherActivity(); 187 } 188 189 private void gotoOtherActivity() { 190 // 跳转页面 191 Intent intent = new Intent(MainActivity.this, OtherActivity.class); 192 startActivity(intent); 193 } 194 }
相关文章
- Android签名与认证详细分析之二(CERT.RSA剖析)
- [Android Traffic] android 流量计算方法
- [Android Memory] android 警告:Exported activity does not require permission
- Android中实现双击事件
- Android Button的四种点击事件
- 45、Android事件总线分发库的使用
- 【第四篇】学习 android 事件总线androidEventbus之发布事件,子线程中接收
- 《Android进阶之光》--事件总线
- Atitit.android js 的键盘按键检测Back键Home键和Menu键事件
- Android Input输入系统之一:KeyEvent事件监听
- android java 堆栈_Android下打印调试堆栈方法
- android系统开发环境配置
- android 11.0 12.0自定义开机向导app
- android事件拦截处理机制详解
- Android Studio Connection refused
- 【Android Gradle 插件】TestOptions 配置 ② ( TestOptions#animationsDisabled 属性配置 | Android 工程本地化测试与设备化测试 )
- 【Android 逆向】函数拦截实例 ( ② 插桩操作 | 保存实际函数入口 6 字节数据 | 在插桩的函数入口写入跳转指令 | 构造拼接桩函数 )
- 【Android 逆向】Android 权限 ( Android 逆向中使用的 android.permission 权限 | Android 系统中的 Linux 用户权限 )
- 【Android 异步操作】线程池 ( 线程池简介 | 线程池初始化方法 | 线程池种类 | AsyncTask 使用线程池示例 )
- Android的Bitmap和BitmapDrawable类解析-android学习之旅(六十)
- android camera(二):摄像头工作原理、s5PV310 摄像头接口(CAMIF)
- Android开发系列之button事件的4种写法
- Android onTouch、OnLongClick、onClick和ScrollView滑动事件冲突
- Android的ViewAnimator而它的子类ViewSwitcher-android学习之旅(三十三)
- Android kotlin使用RecyclerView自定义adapter实例和点击事件
- Android之WindowManager+OpenGL+EGL绘制(十七)