首页 > 其他分享 >Android各组件/控件间通信利器之EventBus

Android各组件/控件间通信利器之EventBus

时间:2023-07-03 10:24:10浏览次数:39  
标签:控件 函数 事件处理 间通信 线程 UI Android ThreadMode EventBus

来源:https://www.cnblogs.com/lwbqqyumidi/p/4041455.html
一、build.gradle 中 dependencies节 增加配置 api 'org.greenrobot:eventbus:3.0.0'
二、注册EventBus,一般放到onCreate里面,代码:EventBus.getDefault().register(this);
三、注册与解绑一般都是成对出现,代码:

/**
 * 解绑EventBus
 * */
@Override
protected void onDestroy() {
  super.onDestroy();
  EventBus.getDefault().unregister(this);
}

四、页面接收来自其他控件/组件的消息

@Subscribe(threadMode = ThreadMode.ASYNC)
public void Event(FavorEvent messageEvent) {
  // 子线程如果要更新UI,需要用到runOnUiThread。
  runOnUiThread(new Runnable() {
      @Override
      public void run() {
          txtDes.setText(messageEvent.getMessage());
      }
  });
}

threadMode的四种模式
//1、ThreadMode.POSTING
//如果使用事件处理函数指定了线程模型为PostThread,那么该事件在哪个线程发布出来的,事件处理函数就会在这个线程中运行,也就是说发布事件和接收事件在同一个线程。在线程模型为PostThread的事件处理函数中尽量避免执行耗时操作,因为它会阻塞事件的传递,甚至有可能会引起ANR。
//2、ThreadMode.MAIN
//如果使用事件处理函数指定了线程模型为MainThread,那么不论事件是在哪个线程中发布出来的,该事件处理函数都会在UI线程中执行。该方法可以用来更新UI,但是不能处理耗时操作。
//3、ThreadMode.BACKGROUND
//如果使用事件处理函数指定了线程模型为BackgroundThread,那么如果事件是在UI线程中发布出来的,那么该事件处理函数就会在新的线程中运行,如果事件本来就是子线程中发布出来的,那么该事件处理函数直接在发布事件的线程中执行。在此事件处理函数中禁止进行UI更新操作。
//4、ThreadMode.ASYNC
//如果使用事件处理函数指定了线程模型为Async,那么无论事件在哪个线程发布,该事件处理函数都会在新建的子线程中执行。同样,此事件处理函数中禁止进行UI更新操作。

标签:控件,函数,事件处理,间通信,线程,UI,Android,ThreadMode,EventBus
From: https://www.cnblogs.com/xsj1989/p/17522068.html

相关文章

  • winfrom 中子窗体控件受到父窗体字体大小控制的解决
    举例为winform添加选项卡,在选项卡添加UserControl或者一个Form后,运行却发现窗体没有完全显示,如下图:右侧的三个按钮只显示了1个半,在这个问题上纠结了很长时间,直到不间断的寻找控件的属性,发现了解决方式和问题所在。这个问题在于子窗体的缩放由父窗体的字体控制,只要修改子窗体的......
  • Android开发_开启子线程执行耗时操作
    Activityactivity=(Activity)getContext();newThread(newRunnable(){@Overridepublicvoidrun(){activity.runOnUiThread(newRunnable(){@Overridepublicvoidrun(){//在这执行耗时操作......
  • Android:倒计时、定时器、定时执行次数使用笔记
    原文:https://blog.csdn.net/weixin_40420578/article/details/103876900一.倒计时(3、2、1)CountDownTimer() //一共3秒,每隔1秒执行一次 CountDownTimertimer=newCountDownTimer(3000,1000){ @Override publicvoidonTick(longmillisUntilFi......
  • wpf checkbox控件模板
    先看一下上一篇文章:wpfbutton控件模板。再看此文会更好理解  vs生产的checkbox控件模板有很长,我们直接找到controltemplate标签,和controltemplate.triggers。控件模板都先找这两个地方看一下布局和触发器既可以了。剩下的都是定义的一些资源和样式。checkbox的控件模板中定......
  • wpf button控件模板
    1.从button的style说起button有很多属性,我们在xaml中定义一个按钮时可以指定button的content、background、height、width等等。这些都是button的属性,而style也不例外也是button的一个属性,只是在给style属性赋值时不能简单的像height=“100”一样简单的设定一个字符串。先看......
  • Android信任证书,把用户级别放入系统级别
    三、操作步骤1、在Windows安装openssl,用来把证书转成.pem 格式1)下载和安装下载其他人做的便捷版安装包:http://slproweb.com/products/Win32OpenSSL.html    2)配置path环境变量   2、把证书转成.pem 格式(如果本身就是这个格式就不转了)......
  • Qt/C++编写超精美自定义控件(历时9年更新迭代/超202个控件/祖传原创)
    一、前言无论是哪一门开发框架,如果涉及到UI这块,肯定需要用到自定义控件,越复杂功能越多的项目,自定义控件的数量就越多,最开始的时候可能每个自定义控件都针对特定的应用场景,甚至里面带了特定的场景的一些设置和处理,随着项目数量的增多,有些控件又专门提取出来共性,做成了通用的自定义......
  • 使用ADB轻松管理Android设备的调试和应用管理
    AndroidDebugBridge(ADB)是一个强大的命令行工具,可用于管理和调试Android设备。1.ADBWiFi调试ADBWiFi调试允许您通过无线网络连接进行设备调试,而无需使用USB连接。以下是进行ADBWiFi调试的步骤:确保您的Android设备与计算机连接在同一网络下。通过USB将设备与计算机连接,并确......
  • Android面经:小厂被diss到自闭,“试水”大厂竟收3份offer
    写在最前面:有时候某人的放弃,将会成就你更好的选择!刚开始面试的时候我真的是处处碰壁,面一家挂一家,面完之后怀疑自我,是不是自己真的太菜了找不到工作,还是真的是像网上所焦虑的那样,Android开发真的是要凉了?这次跳槽经历让我明白,工作本身就是双向选择,一家不行再换一家,总有合适的,千万不......
  • 3588 编译android12 过程中的报错。
     怀疑是当初解压的时候使用的是sudo.   ......