qjr
qjr
  • 发布:2025-07-29 09:55
  • 更新:2025-07-30 16:39
  • 阅读:371

【报Bug】nvue + navigateTo 切换导致app的JSE 进程内存上涨

分类:uni-app

产品分类: uniapp/App

PC开发环境操作系统: Windows

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

HBuilderX类型: 正式

HBuilderX版本号: 4.57

手机系统: Android

手机系统版本号: Android 12

手机厂商: 三星

手机机型: S21

页面类型: nvue

vue版本: vue3

打包方式: 云端

项目创建方式: HBuilderX

示例代码:
<template>  
    <view class="container">  
        <button @click="goto">跳转 test 页面</button>  
    </view>  
</template>  

<script>  
    export default {  
        methods: {  
            goto() {  
                uni.navigateTo({  
                    url: '/pages/test/test'  
                })  
            }  
        }  
    }  
</script>  

<style scoped>  
    .container {  
        flex: 1;  
        justify-content: center;  
        align-items: center;  
    }  
</style>  

<template>  
    <view class="container">  
        <button @click="back">返回 index 页面</button>  
    </view>  
</template>  

<script>  
    export default {  
        methods: {  
            back() {  
                uni.navigateBack()  
            }  
        }  
    }  
</script>  

<style scoped>  
    .container {  
        flex: 1;  
        justify-content: center;  
        align-items: center;  
    }  
</style>

操作步骤:

打开 index.nvue 页面,点击按钮跳转到 test.nvue;
在 test.nvue 页面点击返回;
自动化测试程序来回循环以上步骤 10分钟;
通过如下命令查看内存:
adb shell dumpsys meminfo xxx

预期结果:

app的jse线程内存不会上涨

实际结果:

app的jse线程内存持续上涨

bug描述:

在一个最小的 nvue 页面 Demo 中,仅实现了两个页面 navigateTo + navigateBack 的基本跳转逻辑。在页面中无复杂逻辑,无定时器、无图片、无原生模块引用,仅使用 <button> 实现跳转。

反复进行跳转和返回后,通过 adb 查看 jse 进程的内存持续增长,并不会被释放,最终导致 app 崩溃。

2025-07-29 09:55 负责人:DCloud_App_Array 分享
已邀请:
qjr

qjr (作者)

通过adb shell top查看手机内进程内存和cpu占用情况:
app初始化状态,内存占用也是比较低的;

qjr

qjr (作者)

步骤二:
反复150次的进出页面之后app的内存占用就会上涨,并且在一段时间(10分钟)内并没有回落

蔡cai

蔡cai - 开发的插件:https://ask.dcloud.net.cn/article/41539

等官方吧,给你邀请了几个官方人员

  • qjr (作者)

    谢谢

    2025-07-30 10:23

  • 蔡cai

    回复 qjr: 客气了

    2025-07-30 10:25

DCloud_App_Array

DCloud_App_Array

从现象看有可能存在内存泄漏的问题。
nvue目前已经停止维护了,这类问题处理优先级比较低,有条件建议升级使用 uni-app x 。

  • qjr (作者)

    目前项目已经进行到最后的测试阶段了,除了升级成uni-app x还有其他的办法吗?

    2025-07-30 16:42

  • DCloud_App_Array

    回复 qjr: 我们先排查确认下

    2025-07-30 17:03

  • 1***@qq.com

    回复 qjr: 办法是全部切成vue[doge]

    2025-07-31 08:37

  • qjr (作者)

    回复 1***@qq.com: 本来就是vue切到nvue去开发app的,因为用到的video组件的地方比较多。

    2025-07-31 08:55

  • qjr (作者)

    回复 DCloud_App_Array: 完成确认了吗?

    2025-08-04 09:36

  • DCloud_heavensoft

    回复 qjr: 这个默认是不维护的。虽然你也可以点付费技术支持,付费解决这个问题,但性价比不高。uni-app x是没有内存泄漏问题的,在产品层面就有内存泄漏监控。

    2025-08-08 16:13

  • qjr (作者)

    回复 DCloud_heavensoft: 既然你们还继续支持nvue开发,这个问题这么严重,难道不应该公开一下解决方法吗?

    2025-08-08 17:39

  • DCloud_heavensoft

    回复 qjr: nvue是base在weex上的,这个已经是一个淘汰产物了。如果你是video组件用的多造成的,那有个简单的方法,回到vue,不用uni-app的video组件,而用renderjs,直接用html的createVideoElement。早期Android的webview的video不行,需要原生video,近6年的手机,用Webview的video就够了

    2025-08-09 04:56

  • EsRell_

    回复 DCloud_heavensoft: 淘汰了你们倒是关掉nvue开发通道啊

    2025-08-14 18:02

要回复问题请先登录注册