m***@126.com
m***@126.com
  • 发布:2025-09-30 12:00
  • 更新:2025-09-30 12:02
  • 阅读:23

【报Bug】android 下 computed变量在页面销毁时没有进行回收导致内存泄露

分类:uni-app x

产品分类: uni-app x/App

PC开发环境操作系统: Mac

PC开发环境操作系统版本号: 15.6.1 (24G90)

HBuilderX类型: Alpha

HBuilderX版本号: 4.81

手机系统: Android

手机系统版本号: Android 16

手机厂商: 模拟器

手机机型: 36.1.9-13823996

页面类型: nvue

vue版本: vue3

打包方式: 离线

项目创建方式: HBuilderX

操作步骤:

使用 computed,通过 redirectTo 销毁页面

预期结果:

应该在销毁前进行computed 的垃圾回收,避免出现内存泄露

实际结果:
┬───  
│ GC Root: Thread object  
│  
├─ android.os.HandlerThread instance  
│    Leaking: NO (PathClassLoader↓ is not leaking)  
│    Thread name: 'LeakCanary-Heap-Dump'  
│    ↓ Thread.contextClassLoader  
├─ dalvik.system.PathClassLoader instance  
│    Leaking: NO (InternalLeakCanary↓ is not leaking and A ClassLoader is never leaking)  
│    ↓ ClassLoader.runtimeInternalObjects  
├─ java.lang.Object[] array  
│    Leaking: NO (InternalLeakCanary↓ is not leaking)  
│    ↓ Object[554]  
├─ leakcanary.internal.InternalLeakCanary class  
│    Leaking: NO (UniPortraitPageActivity↓ is not leaking and a class is never leaking)  
│    ↓ static InternalLeakCanary.resumedActivity  
├─ io.dcloud.uniapp.appframe.activity.UniPortraitPageActivity instance  
│    Leaking: NO (Activity#mDestroyed is false)  
│    mApplication instance of io.dcloud.uniapp.UniApplication  
│    mBase instance of androidx.appcompat.view.ContextThemeWrapper  
│    ↓ UniPageActivity.page  
│                      ~~~~  
├─ io.dcloud.uniapp.appframe.a instance  
│    Leaking: UNKNOWN  
│    Retaining 3.9 kB in 114 objects  
│    C instance of io.dcloud.uniapp.appframe.activity.UniPortraitPageActivity with mDestroyed = false  
│    ↓ a.p  
│        ~  
├─ io.dcloud.uniapp.dom.UniNativeDocumentImpl instance  
│    Leaking: UNKNOWN  
│    Retaining 22.7 MB in 503465 objects  
│    ↓ UniNativeDocumentImpl.calculatedCallback  
│                            ~~~~~~~~~~~~~~~~~~  
├─ io.dcloud.uniapp.framework.IndexKt$$ExternalSyntheticLambda48 instance  
│    Leaking: UNKNOWN  
│    Retaining 22.5 MB in 499985 objects  
│    ↓ IndexKt$$ExternalSyntheticLambda48.f$0  
│                                         ~~~  
├─ io.dcloud.uniapp.framework.extapi.IndexKt$$ExternalSyntheticLambda33 instance  
│    Leaking: UNKNOWN  
│    Retaining 22.5 MB in 499984 objects  
│    ↓ IndexKt$$ExternalSyntheticLambda33.f$0  
│                                         ~~~  
├─ uni.UNI0B065E9.GenPagesCbtMoodChoose instance  
│    Leaking: UNKNOWN  
│    Retaining 22.5 MB in 499983 objects  
│    ↓ Page.$nativePage  
│           ~~~~~~~~~~~  
├─ io.dcloud.uniapp.appframe.a instance  
│    Leaking: UNKNOWN  
│    Retaining 929 B in 27 objects  
│    ↓ a.O  
│        ~  
├─ io.dcloud.uniapp.appframe.ui.PageFrameView instance  
│    Leaking: YES (View.mContext references a destroyed activity)  
│    Retaining 16.6 kB in 181 objects  
│    View not part of a window view hierarchy  
│    View.mAttachInfo is null (view detached)  
│    View.mID = R.id.null  
│    View.mWindowAttachCount = 1  
│    mContext instance of io.dcloud.uniapp.appframe.activity.UniPortraitPageActivity with mDestroyed = true  
│    ↓ View.mContext  
╰→ io.dcloud.uniapp.appframe.activity.UniPortraitPageActivity instance  
​     Leaking: YES (ObjectWatcher was watching this because io.dcloud.uniapp.appframe.activity.UniPortraitPageActivity received Activity#onDestroy() callback and Activity#mDestroyed is true)  
​     Retaining 76.6 kB in 1370 objects  
​     key = 33c56a99-5d1c-47f3-925f-83289c3e16e8  
​     watchDurationMillis = 6857  
​     retainedDurationMillis = 1855  
​     mApplication instance of io.dcloud.uniapp.UniApplication  
​     mBase instance of androidx.appcompat.view.ContextThemeWrapper

bug描述:

提示存在内存泄露,看起来是因为页面中使用了 computed 导致,computed 会在 calculatedCallback
中注册依赖追踪,页面销毁时这些回调可能没有正确清理

2025-09-30 12:00 负责人:无 分享
已邀请:

要回复问题请先登录注册