uni-app IUniMP.showUniMP()调用会默认关闭掉所有已打开的原生Activity
uni-app IUniMP.showUniMP()调用会默认关闭掉所有已打开的原生Activity
示例代码:
public static Boolean showLesApp(){
Boolean isrun = false;
IUniMP lesapp = mUniMPCaches.get("UNI9E2AE00");
if(lesapp != null && lesapp.isRuning()){
isrun = lesapp.showUniMP();
}
return isrun;
}
操作步骤:
- 启动app
- 退到后台
- 回到前台
- 调用IUniMP.showUniMP()
- 所有的已经打开在小程序上的原生Activity被关闭了
预期结果:
所有的已经打开在小程序上的原生Activity能保持状态,
实际结果:
所有的已经打开在小程序上的原生Activity被关闭了
bug描述:
IUniMP.showUniMP()调用会默认关闭掉所有已打开的原生Activity
DCUniMPSDK.getInstance().setUniMPOnCloseCallBack(new IUniMPOnCloseCallBack() {
@Override
public void onClose(String appid) {
Log.e("unimp", appid+"被关闭了");
//小程序被关闭需要对实例缓存删除操作
if(mUniMPCaches.containsKey(appid)) {
mUniMPCaches.remove(appid);
}
}
});

更多关于uni-app IUniMP.showUniMP()调用会默认关闭掉所有已打开的原生Activity的实战教程也可以访问 https://www.itying.com/category-93-b0.html
我读了好几遍,是真没看懂啥意思。
什么叫 小程序上的原生Activity被关闭了
更多关于uni-app IUniMP.showUniMP()调用会默认关闭掉所有已打开的原生Activity的实战教程也可以访问 https://www.itying.com/category-93-b0.html
IUniMP.showUniMP() 调用时关闭已打开的原生 Activity 是预期行为,并非 bug。这是因为 uni-app 小程序引擎在显示时会重新接管 Activity 栈管理。
原因分析:
- 小程序引擎启动时会创建独立的 Activity 栈(通常为
UniMPActivity) - 调用
showUniMP()会触发引擎重新初始化当前栈顶 Activity - 引擎为保证运行环境一致性,会清理非小程序相关的原生 Activity
解决方案:
-
使用
startUniMP()替代:如果需要在保留原生 Activity 的同时启动小程序,应使用DCUniMPSDK.getInstance().startUniMP()方法,该方法支持配置启动模式。 -
配置 Activity 启动模式:在原生 AndroidManifest.xml 中为需要保留的 Activity 设置:
android:launchMode="singleInstance" -
监听生命周期回调:通过
IUniMPOnCloseCallBack在关闭时保存状态,重新打开时恢复:// 保存 Activity 状态 Bundle savedInstanceState = new Bundle(); // 恢复时使用 savedInstance 恢复界面 -
检查引擎版本:升级到最新版 SDK(≥3.4.10),该问题在后续版本中有优化。
临时规避方案:
在调用 showUniMP() 前,先检查并手动重新打开需要保留的原生 Activity:
if (needKeepActivity != null && needKeepActivity.isFinishing()) {
Intent intent = new Intent(context, TargetActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
}

