uni-app中通过右上角叉号关闭小程序B后,再去唤起小程序A失败
uni-app中通过右上角叉号关闭小程序B后,再去唤起小程序A失败
操作步骤:
小程序切入再原生App中,已经打开的uniapp小程序A,从小程序A跳转到小程序B中,通过右上角叉号关闭小程序B, 然后再去唤起小程序A失败,小程序A的部署资源都已经成功,调用openUniMP 方法时候出现 【Error Domain=DCUniMPErrorDomain Code=3002 “已存在运行中的小程序,请先将其关闭在运行其他小程序” UserInfo={NSLocalizedDescription=已存在运行中的小程序,请先将其关闭在运行其他小程序」】。
预期结果:
希望iOS可以优化一下启动方法,同安卓一致, 可以直接唤起新的小程序前关闭上一个打开的小程序。 并解决问题2
实际结果:
希望iOS可以优化一下启动方法,同安卓一致, 可以直接唤起新的小程序前关闭上一个打开的小程序。 并解决问题2
bug描述:
小程序切入再原生App中,已经打开的uniapp小程序A,从小程序A跳转到小程序B中,问题1:iOS这边需要先关闭掉小程序A,才能唤起小程序B,安卓则直接不需要关闭小程序A, 直接唤起小程序B即可 ,希望iOS可以优化一下启动方法。 问题2:在问题1中跳转处理好跳转到小程序B后,通过右上角叉号关闭小程序B, 然后再去唤起小程序A失败,小程序A的部署资源都已经成功,调用openUniMP 方法时候出现 【Error Domain=DCUniMPErrorDomain Code=3002 “已存在运行中的小程序,请先将其关闭在运行其他小程序” UserInfo={NSLocalizedDescription=已存在运行中的小程序,请先将其关闭在运行其他小程序」】。
更多关于uni-app中通过右上角叉号关闭小程序B后,再去唤起小程序A失败的实战教程也可以访问 https://www.itying.com/category-93-b0.html
你好
对于问题一:框架的设计是需要宿主来管理小程序的生命周期,Android 端暂时还没实现小程序对象化管理,之后也会修改成和iOS端一致,目前需要针对两个平台分别处理一下吧
问题二:应该是开启了后台运行,开始后点击 x 按钮小程序时隐藏到后台了,没有关闭,然后和问题一是一样的,需要宿主先关闭当前的应用在打开其他的小程序应用;
小程序有官方QQ交流群,欢迎进群交流 892918401
更多关于uni-app中通过右上角叉号关闭小程序B后,再去唤起小程序A失败的实战教程也可以访问 https://www.itying.com/category-93-b0.html
这是一个典型的iOS端小程序生命周期管理问题。问题核心在于iOS平台对小程序实例的管理机制与Android不同。
对于问题1:iOS平台确实需要显式关闭前一个小程序才能打开新的,这是iOS平台的安全机制限制。建议在跳转前调用closeUniMP
方法先关闭当前小程序。
对于问题2:错误3002表明虽然用户关闭了小程序B,但iOS系统认为仍有小程序实例在运行。这是因为右上角关闭按钮可能没有完全销毁小程序实例。解决方案:
- 在调用
openUniMP
前,先强制关闭可能存在的残留实例:
try {
await plus.runtime.closeUniMP();
} catch(e) {
// 忽略关闭错误
}
await plus.runtime.openUniMP(...);
- 检查小程序配置,确保
destroyOnClose
设置为true:
{
"uni-app": {
"destroyOnClose": true
}
}