uni-app 在iOS端应用启动时快速杀死后快速打开会闪退且没有日志

发布于 1周前 作者 sinazl 来自 Uni-App

uni-app 在iOS端应用启动时快速杀死后快速打开会闪退且没有日志

操作步骤:

  • app打开后快速杀死后立马点击图标打开

预期结果:

  • 正常显示页面

实际结果:

  • 崩溃且无日志

bug描述:

  • uniapp 跑在iOS端,应用启动后快速杀死后快速打开会闪退且没有日志
  • 手机端调试基座版本号为3.98
  • 安卓没问题。
  • 将app.vue中生命周期函数的代码全删除,照样闪退。
  • 目前该问题必现

| 信息类别       | 信息内容                         |
|----------------|----------------------------------|
| 产品分类       | uniapp/App                       |
| PC开发环境     | Mac                              |
| PC操作系统版本 | macOS Ventura 13.0               |
| HBuilderX类型  | 正式                             |
| HBuilderX版本  | 3.98                             |
| 手机系统       | iOS                              |
| 手机系统版本   | iOS 15                           |
| 手机厂商       | 苹果                             |
| 手机机型       | 12pro                            |
| 页面类型       | vue                              |
| vue版本        | vue2                             |
| 打包方式       | 云端                             |
| 项目创建方式   | HBuilderX                        |

6 回复

你用你那台测试设备 随便找一个其他app测试一下 这是系统问题


其他原生app没问题,uniapp就有问题。新建一个空项目跑起来也这样。

iOS14 系统上没问题 iOS15 和 iOS16系统上都有问题。 感觉是系统适配有问题。

你用微信以及支付宝试试 我这边测试所有原生app都有这个问题

回复 DCloud_iOS_WZT: 是的,那就是系统的问题。

uni-app 开发中,iOS 应用在启动时快速杀死后快速打开导致闪退的问题,通常与应用的启动流程、资源加载、或内存管理有关。以下是一些可能的原因和解决方案:


1. 应用启动流程问题

  • 原因:iOS 应用在启动时,系统会执行 application:didFinishLaunchingWithOptions: 方法。如果应用在启动过程中未完成初始化,快速杀死并重新打开可能会导致闪退。
  • 解决方案
    • 确保在 App.vueonLaunch 生命周期中,避免执行耗时操作。
    • 如果使用了原生插件或自定义代码,检查 AppDelegate 中的初始化逻辑,确保其快速完成。

2. 内存问题

  • 原因:快速杀死并重新打开应用时,如果内存未完全释放,可能会导致内存冲突或资源加载失败。
  • 解决方案
    • 检查是否有内存泄漏问题,使用 Xcode 的 Instruments 工具(如 LeaksAllocations)进行内存分析。
    • 确保在 onUnloadonHide 生命周期中释放不必要的资源。

3. 原生插件或 SDK 问题

  • 原因:某些原生插件或 SDK 在应用快速重启时可能未正确初始化或释放资源。
  • 解决方案
    • 检查使用的原生插件或 SDK 是否有已知的兼容性问题。
    • 确保插件或 SDK 的初始化和释放逻辑正确。

4. 日志缺失问题

  • 原因:iOS 系统在应用闪退时,可能不会将日志输出到控制台,尤其是在快速重启的情况下。
  • 解决方案
    • 使用 Xcode 连接设备,查看设备的崩溃日志(Device Logs)。
    • AppDelegate 中捕获异常,记录日志:
      NSSetUncaughtExceptionHandler(&uncaughtExceptionHandler);
      
      void uncaughtExceptionHandler(NSException *exception) {
          NSLog(@"Crash: %@", exception);
          NSLog(@"Stack Trace: %@", [exception callStackSymbols]);
      }

5. uni-app 框架问题

  • 原因uni-app 框架本身可能存在某些兼容性问题。
  • 解决方案
    • 确保使用的是最新版本的 uni-app 和 HBuilderX。
    • uni-app 官方社区或 GitHub 仓库中搜索类似问题,查看是否有官方修复或解决方案。

6. 测试与调试

  • 使用 Xcode 连接设备,运行应用并复现问题,查看是否有崩溃日志或错误信息。
  • App.vue 中添加日志,记录应用的生命周期事件,帮助定位问题:
    export default {
        onLaunch() {
            console.log('App launched');
        },
        onShow() {
            console.log('App shown');
        },
        onHide() {
            console.log('App hidden');
        }
    }
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!