使用 computed,通过 redirectTo 销毁页面

- 发布:2025-09-30 12:00
- 更新:2025-09-30 12:02
- 阅读:23
产品分类: 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 的垃圾回收,避免出现内存泄露
应该在销毁前进行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
┬───
│ 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
中注册依赖追踪,页面销毁时这些回调可能没有正确清理
0 个回复