uni-app APP偶尔卡死 点击无反应

uni-app APP偶尔卡死 点击无反应

| 开发环境 | 版本号 | 项目创建方式 |
|----------|--------|--------------|
| HBuilderX | 3.1.22 | - |

产品分类:HTML5+

手机系统:Android  
手机系统版本号:Android 10  
手机厂商:小米  
手机机型:MI9  

打包方式:云端  

App下载地址或H5网址:  
[https://www.qizhihaotian.com/apps/m/download.html](https://www.qizhihaotian.com/apps/m/download.html)

### 操作步骤:
下载APP,点击tab我的,然后里面的链接连点几次之后出现卡死

### 预期结果:

实际结果:


### bug描述:
不单纯只是提交的手机型号和版本,在安卓版本使用过程中,不知道为什么就会卡死,点击任何地方,都没有反应

更多关于uni-app APP偶尔卡死 点击无反应的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

建议debug下输出日志, 看日志仔细排查问题所在

更多关于uni-app APP偶尔卡死 点击无反应的实战教程也可以访问 https://www.itying.com/category-93-b0.html


根据你的描述,这是一个典型的UI线程阻塞JavaScript执行超时导致的卡死问题。在uni-app中,尤其是在Android平台上,频繁、快速地触发页面跳转或组件更新,很容易引发此问题。

核心原因分析:

  1. 连续快速点击触发多次路由跳转:uni-app的路由跳转(如uni.navigateTo)是异步的,但频繁触发会导致大量页面实例被创建和压入栈中。如果前一个页面的onLoadonShow生命周期函数或页面数据加载逻辑执行缓慢,后续的跳转请求就会在队列中堆积,最终阻塞UI线程,导致界面完全无响应。
  2. 页面/组件内存在耗时同步操作:如果在“我的”页面或其子页面的生命周期、事件回调中,存在复杂的同步计算、大数据量的JSON.parse/JSON.stringify、或同步的本地存储读写操作,会直接阻塞JavaScript线程,使UI无法更新和响应。
  3. 内存增长与回收压力:快速创建多个页面实例可能导致内存快速上升,触发垃圾回收。如果垃圾回收过程(尤其是全量回收)发生在主线程,会引起明显的卡顿甚至假死。

针对性排查与解决方案:

1. 立即优化点击交互(治标且治本):

  • 按钮防抖:对触发跳转的点击事件立即加入防抖处理。这是最重要的一步。
    // 在触发跳转的方法中
    let navigateLock = false;
    function navigateToPage() {
        if (navigateLock) return;
        navigateLock = true;
        uni.navigateTo({
            url: '/pages/xxx/xxx',
            success: () => {
                // 可以设置一个合理的解锁延迟,如300ms
                setTimeout(() => { navigateLock = false; }, 300);
            },
            fail: () => { navigateLock = false; }
        });
    }
    
  • 使用页面栈管理:检查页面栈深度。uni-app默认有页面栈限制,接近上限时再跳转会失败。可以在跳转前判断:
    const pages = getCurrentPages();
    if (pages.length >= 10) { // 接近或达到栈上限时,用redirectTo代替
        uni.redirectTo({ url: '/pages/xxx/xxx' });
    } else {
        uni.navigateTo({ url: '/pages/xxx/xxx' });
    }
回到顶部