> ## Documentation Index
> Fetch the complete documentation index at: https://docs.flashcat.cloud/llms.txt
> Use this file to discover all available pages before exploring further.

# Android SDK 性能影响

> 了解 Flashduty Android RUM SDK 对应用 CPU、内存、启动时间、APK 大小和网络使用的影响，以及性能优化建议。

## 概述

在将任何 SDK 集成到 Android 应用时，了解其性能影响对于维护良好的用户体验至关重要。Flashduty RUM SDK 在设计时充分考虑了性能因素，并提供透明的测量数据，帮助您做出明智的集成决策。

<Check>
  SDK 采用异步处理和批量上报机制，避免阻塞主线程，确保不影响应用的 UI 响应性能。
</Check>

## 性能基准测试

为了评估 SDK 对应用性能的实际影响，我们在典型使用场景下进行了性能基准测试。测试中启用了以下 SDK 功能模块：

* `dd-sdk-android-rum`：RUM 核心功能
* `dd-sdk-android-trace`：链路追踪
* `dd-sdk-android-okhttp`：网络请求追踪

SDK 使用默认配置进行初始化，并模拟常见用户操作（如页面浏览、滚动列表、网络请求等）。

### 测试结果

| 指标         | 集成 SDK 后                | 未集成 SDK  | 影响       |
| ---------- | ----------------------- | -------- | -------- |
| 峰值 CPU 使用率 | \~27%                   | \~25%    | +2%      |
| 峰值内存使用     | \~435 MB                | \~437 MB | 基本持平     |
| 应用启动时间     | \~245 ms                | \~230 ms | +15 ms   |
| APK 大小     | +500 KB                 | -        | 约 0.5 MB |
| 网络使用       | \~70 KB 发送 / \~20 KB 接收 | -        | 根据事件量变化  |

<Note>
  以上数据为典型场景下的参考值，实际影响会因应用复杂度、设备性能和 SDK 配置不同而有所差异。
</Note>

### 性能影响详解

<AccordionGroup>
  <Accordion title="CPU 使用率" icon="microchip">
    SDK 对 CPU 的影响主要来自：

    * 事件收集和处理
    * 数据批处理和压缩
    * 网络请求上报

    SDK 采用异步处理和批量上报机制，避免阻塞主线程，确保不影响应用的 UI 响应性能。
  </Accordion>

  <Accordion title="内存使用" icon="memory">
    SDK 使用固定大小的内存缓冲区存储待上报的事件数据，不会随时间无限增长。过旧的数据会被自动清理，确保不会占用过多内存。
  </Accordion>

  <Accordion title="启动时间" icon="rocket">
    SDK 初始化过程经过优化，启动时间影响控制在毫秒级。

    <Tip>
      建议在 `Application.onCreate()` 中尽早初始化 SDK，以便捕获完整的应用启动过程。
    </Tip>
  </Accordion>

  <Accordion title="APK 大小" icon="box">
    SDK 采用模块化设计，您可以根据需要只引入必要的功能模块：

    | 模块                       | 说明          |
    | ------------------------ | ----------- |
    | `dd-sdk-android-rum`     | RUM 核心功能    |
    | `dd-sdk-android-trace`   | 链路追踪        |
    | `dd-sdk-android-okhttp`  | OkHttp 网络追踪 |
    | `dd-sdk-android-webview` | WebView 追踪  |

    只引入必要的模块可以最小化对 APK 大小的影响。
  </Accordion>

  <Accordion title="网络使用" icon="wifi">
    SDK 采用以下策略优化网络使用：

    * **批量上报**：事件先缓存到本地，批量发送以减少网络请求次数
    * **数据压缩**：上报数据经过压缩处理，减少传输流量
    * **智能调度**：根据网络状态和电量情况智能调度上报时机
  </Accordion>
</AccordionGroup>

## 性能优化建议

如果您对性能有特殊要求，可以考虑以下优化措施：

<Steps>
  <Step title="调整采样率">
    通过配置采样率减少收集的事件数量：

    ```kotlin theme={null}
    val rumConfig = RumConfiguration.Builder(applicationId)
        .setSessionSampleRate(80f) // 采样 80% 的会话
        .build()
    ```
  </Step>

  <Step title="按需启用功能">
    只启用必要的追踪功能：

    ```kotlin theme={null}
    val rumConfig = RumConfiguration.Builder(applicationId)
        .trackUserInteractions(false) // 禁用用户交互追踪
        .trackLongTasks(false) // 禁用长任务追踪
        .build()
    ```
  </Step>

  <Step title="配置上报策略">
    调整批量上报的大小和频率，根据应用场景优化网络使用。
  </Step>
</Steps>

## 离线数据存储

SDK 在设备离线时会将数据存储到本地，存储空间使用受到严格限制：

<Check>
  * 使用固定大小的磁盘缓存
  * 过期数据自动清理
  * 不会因缓存数据过多影响设备存储空间
</Check>

## 相关文档

<CardGroup cols={2}>
  <Card title="SDK 接入指南" icon="plug" href="/zh/rum/sdk/android/sdk-integration">
    了解如何接入 SDK
  </Card>

  <Card title="高级配置" icon="sliders" href="/zh/rum/sdk/android/advanced-config">
    了解如何配置 SDK 的高级功能
  </Card>

  <Card title="数据收集" icon="database" href="/zh/rum/sdk/android/data-collection">
    了解 SDK 收集的数据类型
  </Card>
</CardGroup>
