uni-app 当手机系统主题与plus.nativeUI.setUIStyle方法所设置主题不一致时APP闪退

uni-app 当手机系统主题与plus.nativeUI.setUIStyle方法所设置主题不一致时APP闪退

操作步骤:

  • 当手机主题为"light"的时候使用plus.nativeUI.setUIStyle(‘dark’)会出现app退出。反之也会出现相同情况

预期结果:

  • 当手机主题为"light"的时候使用plus.nativeUI.setUIStyle(‘dark’)会出现app退出。反之也会出现相同情况

实际结果:

  • 当手机主题为"light"的时候使用plus.nativeUI.setUIStyle(‘dark’)会出现app退出。反之也会出现相同情况

bug描述:

  • 当手机系统主题与plus.nativeUI.setUIStyle方法所设置主题不一致app退出运行。

| 信息类别         | 信息内容                           |
|------------------|------------------------------------|
| 产品分类         | uniapp/App                         |
| PC开发环境       | Mac                                |
| PC版本号         | 13.0.1 (22A400)                    |
| HBuilderX类型    | 正式                               |
| HBuilderX版本号  | 3.99                               |
| 手机系统         | iOS                                |
| 手机系统版本号   | iOS 17                             |
| 手机厂商         | 苹果                               |
| 手机机型         | iphone12                           |
| 页面类型         | vue                                |
| vue版本          | vue2                               |
| 打包方式         | 云端                               |
| 项目创建方式     | HBuilderX                          |

更多关于uni-app 当手机系统主题与plus.nativeUI.setUIStyle方法所设置主题不一致时APP闪退的实战教程也可以访问 https://www.itying.com/category-93-b0.html

2 回复

更新到最新的alpha

更多关于uni-app 当手机系统主题与plus.nativeUI.setUIStyle方法所设置主题不一致时APP闪退的实战教程也可以访问 https://www.itying.com/category-93-b0.html


uni-app 中,如果你使用 plus.nativeUI.setUIStyle 方法设置应用的主题风格(如暗黑模式或亮色模式),并且当手机系统主题与 setUIStyle 设置的主题不一致时,可能会导致应用闪退。这种情况通常是由于 setUIStyle 方法的调用与系统主题的切换产生了冲突,或者底层原生代码在处理主题切换时出现了问题。

可能的原因

  1. 系统主题与 setUIStyle 主题冲突plus.nativeUI.setUIStyle 设置的主题可能与系统主题不一致,导致 UI 渲染时出现异常。
  2. 原生代码问题setUIStyle 方法依赖底层的原生代码实现,如果原生代码在处理主题切换时存在 Bug,可能会导致应用崩溃。
  3. 资源加载问题:主题切换时,部分资源(如颜色、图片等)可能未正确加载或处理,导致应用崩溃。

解决方案

  1. 检查 setUIStyle 调用时机

    • 确保在应用启动时或用户手动切换主题时调用 setUIStyle,而不是在系统主题切换时频繁调用。
    • 避免在系统主题切换时立即调用 setUIStyle,可以通过监听系统主题变化事件,延迟调用 setUIStyle 方法。
  2. 监听系统主题变化

    • 使用 plus.nativeUI 或其他 API 监听系统主题变化,确保应用主题与系统主题一致。
    • 示例代码:
      plus.nativeUI.onThemeChange((theme) => {
        plus.nativeUI.setUIStyle(theme === 'dark' ? 'dark' : 'light');
      });
      
  3. 处理主题切换异常

    • 在使用 setUIStyle 时,捕获可能的异常并进行处理,避免应用崩溃。
    • 示例代码:
      try {
        plus.nativeUI.setUIStyle('dark');
      } catch (error) {
        console.error('Failed to set UI style:', error);
      }
      
  4. 确保资源正确加载

    • 确保在主题切换时,相关的资源(如颜色、图片等)能够正确加载和处理。
    • 可以使用动态样式或条件渲染来确保资源与当前主题一致。
  5. 更新 uni-app 和相关插件

    • 确保你使用的 uni-app 版本是最新的,并且相关的原生插件也是最新版本,以避免已知的 Bug。
  6. 测试和调试

    • 在不同的设备和系统版本上测试应用,确保主题切换不会导致应用崩溃。
    • 使用调试工具(如 Chrome DevTools 或 HBuilderX 的调试功能)捕获崩溃日志,分析具体原因。

示例代码

以下是一个简单的示例,展示如何监听系统主题变化并设置应用主题:

// 监听系统主题变化
plus.nativeUI.onThemeChange((theme) => {
  try {
    // 根据系统主题设置应用主题
    plus.nativeUI.setUIStyle(theme === 'dark' ? 'dark' : 'light');
  } catch (error) {
    console.error('Failed to set UI style:', error);
  }
});

// 初始化应用主题
plus.nativeUI.getTheme((theme) => {
  try {
    plus.nativeUI.setUIStyle(theme === 'dark' ? 'dark' : 'light');
  } catch (error) {
    console.error('Failed to set UI style:', error);
  }
});
回到顶部