登录app打开小程序,重复多次,再退出登录更换另一个账号登录,打开小程序,宿主activity无法启动

- 发布:2022-01-24 11:19
- 更新:2022-01-24 18:00
- 阅读:736
产品分类: uni小程序SDK
手机系统: Android
手机系统版本号: Android 11
手机厂商: OPPO
手机机型: K7x
页面类型: nvue
SDK版本号: 3.3.8
操作步骤:
预期结果:
宿主activity能正常启动
宿主activity能正常启动
实际结果:
宿主activity未能正常启动
宿主activity未能正常启动
bug描述:
关闭后台模式,在更换启动参数后有一定的概率会触发所有小程序都无法打开的问题(jsonobject 结构没有变化,只是改了值例如token等),没有任何错误信息,确认如下代码一定被执行
val uniMpOpenConfig = UniMPOpenConfiguration()
uniMpOpenConfig.splashClass = UniAppSplashView::class.java
uniMpOpenConfig.redirectPath = redirectPath
uniMpOpenConfig.extraData = jsonObject
val unImp = SoftReference(
DCUniMPSDK.getInstance().openUniMP(
context,
appId,
uniMpOpenConfig
)
)
mUniMPCaches[appId] = unImp
currentAppId = appId
这个问题目前已经修复了,修复记录:我们app是需要登录才能进首页的,首页是原生开发,首页上的子模块大部分是小程序。之前复现就是第一次登录到首页,打开小程序多个正常。然后退出登录再换别的账号登录后就会复现问题。起初怀疑是不是透传参数中token值发生改变导致,通过验证排除。之后在思考目前多进程方案应该配合有一定的缓存策略,是否因为缓存问题导致(因为问题复现后没有任何错误提示,只是点击后宿主activity没有启动)。再次查询api,找到closeUniMP,首先猜测closeUniMP应该伴随着缓存的清理,那么后续就在退出登录后配合自身业务调用如下代码:
fun closeAllUniApp() {
mUniMPCaches.forEach { it.value.closeUniMP() }
}
问题得到解决。之后反复更换账号登录,问题没有再次出现。
但是这里有个问题就很疑惑,以至于之前我们这边根本没往这个方向考虑,既然是关闭后台的模式,为什么在小程序退出的时候没有清理干净,而后需要调用closeunimp
skipper92 (作者)
目前我猜测是否因为我们这边退出登录后finish home的原因,导致第一次缓存的cotext失效,从而发生宿主activity不能打开的问题。如果是这样能否内部处理,或者说在文档做一定的说明这种情况下closeUniMP的作用(因为目前的解决方案就是非业务的)。如果是内部能处理更好,升级sdk版本即可。
2022-01-24 15:10
DCloud_Android_DQQ
回复 skipper92: 你们期望 宿主销毁的时候,该宿主缓存的进程示例也销毁是吗
2022-01-24 16:14