用户3019083
用户3019083
  • 发布:2026-09-24 10:06
  • 更新:2026-09-24 10:06
  • 阅读:38

【报Bug】安卓 15/16、targetSdk 35 下,uni小程序暂停时主动 GC 导致主线程阻塞,申请兼容修复

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

PC开发环境操作系统版本号:

HBuilderX类型: 正式

HBuilderX版本号: 5.26

手机系统: Android

手机系统版本号: Android 16

手机厂商: 华为

手机机型: 很多

页面类型: vue

vue版本: vue2

打包方式: 云端

项目创建方式: HBuilderX

操作步骤:

同上

预期结果:

同上

实际结果:

同上

bug描述:

我们接入 uni小程序 SDK 后,发现线上大量 ANR 集中在安卓 15/16,小程序暂停时主线程停在以下调用链:

DCUniMPActivity.onPause
→ WebAppActivity.onPause
→ EntryProxy.onPause
→ io.dcloud.unimpv2.m.b
→ System.gc(System.java:1606)
→ Runtime.gc
→ Runtime.nativeGc

已核实的关键证据:

  1. 新旧组件在暂停流程末尾均有无条件 System.gc()。

  2. 宿主应用同期将 targetSdk 从 30 升至 35。

  3. 安卓 15/16 对 targetSdk > 34 的应用,会让 System.gc() 直接调用 Runtime.gc();旧兼容逻辑通常只设置标记,需配合 runFinalization() 才回收。安卓官方源码变更
    (https://android.googlesource.com/platform/libcore/+/320a26dfbac1117cf88b2117403da47ca325a821%5E%21/)

  4. 线上堆栈的 System.java:1606 与该新增分支对应。已核查官方 5.24 制品,相关主动 GC 调用仍然保留。

    初步判断: 目标版本升级触发系统行为变化,使 SDK 原有暂停逻辑频繁请求 GC,是本次 ANR 上涨的首要嫌疑;尚未完成实机对照验证。

    请协助:

    • 评估移除暂停主线程中的无条件 System.gc(),或提供关闭该调用的配置。
2026-09-24 10:06 负责人:无 分享
已邀请:

要回复问题请先登录注册