位图内存用量

位图通常是应用中最耗内存的对象。解码和缩放操作通常位于帧渲染的关键路径上。通过减少卡顿、ANR 和与 OOM 相关的进程终止,优化位图内存使用量可显著提高界面响应速度、电池续航时间和整体稳定性。

识别高位图内存用量

Android Vitals 通过汇总 Android 设备的数据,提供有关应用的位图内存占用空间的指标。默认情况下,这些指标是通过对过去 28 天的每日数据进行汇总而计算得出的。这些数据有助于识别不同设备类型和版本在内存效率方面的趋势和潜在回归。

Android Vitals 会按以下进程状态细分应用的位图内存用量:

  • 前台:应用进程可见。与在其他进程状态下相比,前台进程的 P99 明显更高是预期情况,但如果 P99/P50 比率过高(例如高于 3.5 倍),开发者应进行调查,因为这通常表明存在位图内存泄漏。您可以通过查看典型用量 (P50) 和离群用量 (P99) 之间的差异来识别此问题;虽然一般资产膨胀会使所有百分位的内存均匀增加,但内存泄漏会随着时间的推移而加剧,从而严重扭曲尾端数据 (P99)。确保在前台位图分配后,应用转换到其他状态时不会不必要地保留这些位图。
  • 用户感知服务:应用进程正在可感知状态下运行。这包括前台服务、加急作业和由用户发起的数据传输作业。应用在转换到这些状态时不得保留大量前台位图分配。由于这些服务是为长时间运行的任务设计的,因此保留大型资源会降低整体用户体验,并迫使低内存终止守护程序 (LMKD) 通过终止低优先级进程来回收内存。
  • 后台:应用正在运行后台服务,或最近已转入后台,但尚未缓存。由于此进程状态不如前台进程或可感知进程重要,因此应用应在此处明确释放大型位图资源,以减轻内存压力。
  • 已缓存:应用处于已缓存状态。此状态对系统内存压力(例如 LMK)高度敏感。在此状态下,应用必须主动减少位图内存用量,以避免被操作系统逐出。

导致位图内存用量过高的因素

从未使用的虚拟内存也可能包含在计算中。如果您发现位图内存用量出乎意料地高,请验证您是否分配了未使用的内存。