在Android的MVI/MVVM架构中能否统一管理指标、日志与错误弹窗?
在MVI/MVVM架构中实现统一点击事件异常处理的可行性
我们希望在Android应用中提供setPlatformClickListener(listener, "eventName")方法,强制所有开发者用它替代原生的setClickListener,该方法的实现代码如下(注意其中的POPUP_GENERIC_ERROR相关逻辑):
// 若了解指标体系,全局维度(标签)包括OS、版本、客户ID等,这些已在全局维度Map中设置 Map<String, String> dimensions = Map.of("name", eventName); String requestId = UUID.randomUUID().toString(); Context.setMagic("RequestId", requestId); // 这里的RequestId上下文绑定逻辑采用类似协程作用域数据传递的实现方式 try { metrics.increment("click.started", dimensions); // 执行开发者传入的点击监听器逻辑 listener.invoke(); metrics.increment("click.success", dimensions); } catch(Exception e) { log.error("An error has occurred", e); // 请求ID会被自动记录到日志中 dimensions.put("exception", e.getClass().getSimpleName()); metrics.increment("click.failure", dimensions); POPUP_GENERIC_ERROR(requestId); // 所有日志(包括上方的错误日志)都携带RequestId,用户可以提供该ID协助排查问题 } finally { metrics.recordLatency("click.duration", dimensions, startTime); Context.remove("RequestId"); }
通用错误弹窗会弹出一个对话框,显示类似您遇到了一个错误。requestId: xxxxxx的内容,目前仅包含一个“确定”按钮。
我们的核心目标和多数GUI框架的实践一致:
- 让开发者专注于成功路径的代码编写,将空指针等异常统一抛至上层处理;
- 避免应用崩溃——Android的机制较为特殊,线程起始处抛出的任何异常都可能导致应用崩溃,我们困惑为何系统不提供一个简单的弹窗提示(比如“您遇到了一个bug,建议重启应用”)的默认选项。
请问在MVI或MVVM架构中,是否可以实现上述统一处理逻辑?还是说每个点击监听器都必须编写独立的错误处理代码?(这在拥有200+点击监听器的场景下会是一场噩梦)
内容的提问来源于stack exchange,提问作者Dean Hiller
相关产品推荐
相关产品推荐

