当前位置: 首页 > wzjs >正文

厦门做网页网站的公司有哪些可以在线做海报的网站

厦门做网页网站的公司,有哪些可以在线做海报的网站,宏信网络网站建设,电子商务网站设计的认识Android Java 实现事件总线 事件总线(Event Bus)是一种在 Android 开发中常用的组件间通信机制,它可以实现组件间的解耦通信。以下是几种在 Android Java 项目中实现事件总线的方式: 1. 使用第三方库(推荐) GreenRobot EventBu…

Android Java 实现事件总线

事件总线(Event Bus)是一种在 Android 开发中常用的组件间通信机制,它可以实现组件间的解耦通信。以下是几种在 Android Java 项目中实现事件总线的方式:

1. 使用第三方库(推荐)

GreenRobot EventBus

添加依赖

implementation 'org.greenrobot:eventbus:3.3.1'

基本使用

  1. 定义事件类:
public class MessageEvent {public final String message;public MessageEvent(String message) {this.message = message;}
}
  1. 注册/注销订阅者(通常在 Activity/Fragment 中):
@Override
public void onStart() {super.onStart();EventBus.getDefault().register(this);
}@Override
public void onStop() {super.onStop();EventBus.getDefault().unregister(this);
}
  1. 声明订阅方法:
@Subscribe(threadMode = ThreadMode.MAIN)
public void onMessageEvent(MessageEvent event) {Toast.makeText(this, event.message, Toast.LENGTH_SHORT).show();
}
  1. 发布事件:
EventBus.getDefault().post(new MessageEvent("Hello EventBus!"));

2. 自定义简单事件总线

实现代码

import java.lang.ref.WeakReference;
import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.Executor;
import java.util.concurrent.Executors;public class SimpleEventBus {private static volatile SimpleEventBus instance;private final Map<Class<?>, List<Subscriber>> subscribersMap = new HashMap<>();private final Executor executor = Executors.newCachedThreadPool();public static SimpleEventBus getDefault() {if (instance == null) {synchronized (SimpleEventBus.class) {if (instance == null) {instance = new SimpleEventBus();}}}return instance;}public void register(Object subscriber) {Class<?> subscriberClass = subscriber.getClass();Method[] methods = subscriberClass.getDeclaredMethods();for (Method method : methods) {if (method.isAnnotationPresent(Subscribe.class)) {Class<?>[] parameterTypes = method.getParameterTypes();if (parameterTypes.length != 1) {throw new IllegalArgumentException("Subscribe method must have exactly 1 parameter");}Class<?> eventType = parameterTypes[0];Subscriber subscriberWrapper = new Subscriber(new WeakReference<>(subscriber), method);synchronized (this) {List<Subscriber> subscribers = subscribersMap.get(eventType);if (subscribers == null) {subscribers = new ArrayList<>();subscribersMap.put(eventType, subscribers);}subscribers.add(subscriberWrapper);}}}}public void unregister(Object subscriber) {synchronized (this) {for (List<Subscriber> subscribers : subscribersMap.values()) {for (int i = subscribers.size() - 1; i >= 0; i--) {Subscriber subscriberWrapper = subscribers.get(i);Object target = subscriberWrapper.reference.get();if (target == null || target == subscriber) {subscribers.remove(i);}}}}}public void post(Object event) {Class<?> eventClass = event.getClass();List<Subscriber> subscribers;synchronized (this) {subscribers = subscribersMap.get(eventClass);}if (subscribers != null && !subscribers.isEmpty()) {for (Subscriber subscriber : subscribers) {executor.execute(() -> subscriber.invoke(event));}}}private static class Subscriber {private final WeakReference<Object> reference;private final Method method;private final ThreadMode threadMode;Subscriber(WeakReference<Object> reference, Method method) {this.reference = reference;this.method = method;this.method.setAccessible(true);Subscribe annotation = method.getAnnotation(Subscribe.class);this.threadMode = annotation.threadMode();}void invoke(Object event) {Object target = reference.get();if (target == null) return;try {if (threadMode == ThreadMode.MAIN) {new Handler(Looper.getMainLooper()).post(() -> {try {method.invoke(target, event);} catch (Exception e) {e.printStackTrace();}});} else {method.invoke(target, event);}} catch (Exception e) {e.printStackTrace();}}}public @interface Subscribe {ThreadMode threadMode() default ThreadMode.POSTING;}public enum ThreadMode {POSTING, // 与发布者在同一线程MAIN    // 主线程}
}

使用示例

  1. 定义事件:
public class CustomEvent {public String data;public CustomEvent(String data) {this.data = data;}
}
  1. 注册和订阅:
public class MainActivity extends AppCompatActivity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);SimpleEventBus.getDefault().register(this);}@Overrideprotected void onDestroy() {super.onDestroy();SimpleEventBus.getDefault().unregister(this);}@SimpleEventBus.Subscribe(threadMode = SimpleEventBus.ThreadMode.MAIN)public void onCustomEvent(CustomEvent event) {Toast.makeText(this, event.data, Toast.LENGTH_SHORT).show();}
}
  1. 发布事件:
SimpleEventBus.getDefault().post(new CustomEvent("Hello from SimpleEventBus!"));
http://www.dtcms.com/wzjs/566692.html

相关文章:

  • 怎么自己制作一首歌曲安阳网站如何做优化
  • 怎么自己网站搜不到小型公司网络搭建
  • 中山精品网站建设策划书网站建设文档模板
  • 为什么asp.net做的网站上传后不显示照片wordpress缩略图代码显示
  • 公司需要一个简单的网站手机网站免费模板
  • 网站建设有哪几种企业建设网站的功能是什么
  • 农村网站做移动学生网页设计主题推荐
  • 昆明餐饮网站建设怎样制作自己店铺的小程序
  • 高端品牌网站建设九五网络兰州网络优化
  • 无锡网站制作优化vps搭建网站
  • 自己电脑做网站iis视频剪辑培训班的学费是多少
  • 建设小型网站价钱网页解析技术流程
  • 嘉兴网站建设企业网站暂时关闭怎么做
  • wordpress网站支持中文注册简单网页制作代码html
  • 网站实现隶书繁体kotlin做网站
  • seo网站诊断优化流程wordpress资源图片主题
  • 市场体系建设司在官方网站vue做的项目网站
  • 小说网站要怎么做中国建设银行网站查询密码是什么
  • 暴富建站 网址网站建设优化服务报价
  • 网站开发用什么语言最多怎么创建免费自己的网站平台
  • 杭州网站维护酒店网站建设必要性
  • 做铝材哪些网站招聘整站优化多少钱
  • 外贸做的社交网站晚上正能量免费下载软件安全
  • 文昌市住房和城乡建设局网站海口广告设计制作公司
  • 企业网站背景颜色电子商务公司经营范围有哪些
  • 建造网站需要什么商丘网站制作推广
  • 大型网站方案广州市手机网站建设公司
  • 公司网站建站要多少钱一年资源下载类网站如何做外链
  • 江阴建设银行网站爱站网关键词查询工具
  • 如何查询自己的网站是否被收录外贸做网站推广