uni-app 安卓app热更新后,plus.runtime.restart()后第一次打开新页面无法跳转,必须杀掉进程

uni-app 安卓app热更新后,plus.runtime.restart()后第一次打开新页面无法跳转,必须杀掉进程

操作步骤:

  • 更新后第一次打开新页面无法跳转,必须杀掉进程重新进才可以

预期结果:

  • 可以正常跳转页面不卡死

实际结果:

  • 目前不能实现

bug描述:

  • 安卓app热更新后, plus.runtime.restart() 后第一次打开新页面无法跳转,必须杀掉进程,试了好几个手机机型均有此问题

| 信息类别         | 信息内容                           |
|------------------|------------------------------------|
| 产品分类         | uniapp/App                         |
| PC开发环境       | Mac                                |
| PC操作系统版本   | 版本12.6(21G15)                  |
| HBuilderX类型    | Alpha                              |
| HBuilderX版本    | 4.11                               |
| 手机系统         | Android                            |
| 手机系统版本     | Android 14                         |
| 手机厂商         | 小米                               |
| 手机机型         | 小米                               |
| 页面类型         | vue                                |
| Vue版本          | vue2                               |
| 打包方式         | 云端                               |
| 项目创建方式     | HBuilderX                          |

更多关于uni-app 安卓app热更新后,plus.runtime.restart()后第一次打开新页面无法跳转,必须杀掉进程的实战教程也可以访问 https://www.itying.com/category-93-b0.html

9 回复

解决了吗兄弟

更多关于uni-app 安卓app热更新后,plus.runtime.restart()后第一次打开新页面无法跳转,必须杀掉进程的实战教程也可以访问 https://www.itying.com/category-93-b0.html


提供完整的示例,我们需要复现问题才确认具体问题

问题确实存在,我也遇到了。
uni.downloadFile + plus.runtime.install + plus.runtime.restart 用于升级apk,感觉plus.runtime.restart属于热重启,只能更新wgt类的资源,不能更新代码。
怀疑pages.json路由打包对应的app-config-service.js在重启时没被重载,强杀后重载就正常了。曾经有人提过APP模式通过加时间戳解决, https://ask.dcloud.net.cn/question/46791,不清楚如何来做。
官方有专门的测试人员吗?根据现象也很容易构造出问题。

已找到解决办法,android工程 dcloud_control.xml debug参数正式包需要和syncDebug参数一样,设置为false,坑不?
我前面一直有查这个debug参数,官网没有任何解释,只说调试开关,可能debug true时,会缓存pages.json编译出的app-config-service.js导致出现问题。

老哥,我没看到有这个配置文件啊?

我也遇到了这个问题,必现的热更新,我用的最新的版本4.28。APP打和wgt打包都是最新版本,第一次重启更新后就卡在启动界面。

使用的云打包

回复 7***@qq.com: 这个问题你解决没有

在 uni-app 开发中,使用 plus.runtime.restart() 进行热更新后,可能会导致某些页面无法正常跳转,特别是在 Android 设备上。这个问题通常与应用的启动流程或页面加载机制有关。以下是一些可能的解决方案和排查步骤:


1. 检查页面跳转逻辑

  • 确保页面跳转的代码在 onLaunchonShow 生命周期中正确执行。
  • 检查是否有异步操作(如网络请求)未完成,导致页面跳转被阻塞。

2. 延迟页面跳转

如果问题是由于重启后资源未完全加载导致的,可以尝试延迟页面跳转:

setTimeout(() => {
    uni.navigateTo({
        url: '/pages/newPage'
    });
}, 1000); // 延迟 1 秒

3. 检查热更新逻辑

  • 确保热更新完成后,所有资源已正确加载。
  • 如果使用了自定义热更新逻辑,检查是否有未处理的异常或资源加载失败的情况。

4. 使用 plus.runtime.quit() 代替 restart()

在某些情况下,restart() 可能会导致应用状态异常。可以尝试先退出应用,然后重新启动:

plus.runtime.quit();
plus.runtime.launchApplication({
    action: 'android.intent.action.MAIN'
});
回到顶部