RUM Android SDK 在核心功能层针对不同场景和数据类型分别采用了最适合的技术手段,而不是用单一技术覆盖所有采集需求,这是因为不同类型的事件有不同的底层机制和采集要求:
- 基于 Native 信号量的采集:适用于 C/C++ 代码层面的严重错误。Native 崩溃(如 SIGSEGV 段错误、SIGILL 非法指令)和 ANR(SIGQUIT 信号)都发生在操作系统信号层面,只有通过注册自定义信号处理器才能在崩溃或无响应的精确时刻捕获线程堆栈、寄存器状态等现场信息。
- 基于字节码插桩的采集:适用于需要对第三方库或框架方法无侵入埋点的场景。网络请求(HttpURLConnection、OkHttp)、WebView、按钮点击等数据需要在编译期通过 Transform/Instrumentation + ASM 修改字节码注入采集代码,这样对应用开发者完全透明,无需手动改动业务代码。
- 基于标准 API 的采集:适用于 JVM 和 Android 框架原生支持回调的场景。Java 崩溃用 UncaughtExceptionHandler、页面与应用状态用 Activity 生命周期回调,直接利用标准机制即可高效采集,无需额外的底层 Hook。
通过为每类数据选择最匹配的技术手段,SDK 才能在保持轻量、无侵入的同时,做到对应用稳定性、性能和用户行为的全面、精准采集。




