该问题请在专业群( uni-app 官方技术交流群 1 ) 咨询,群中有相关专业的管理员和群友。
问题现象
Flutter 通过事件通知 Android 原生层打开 uni 小程序(wgt),第一次能正常进入小程序页面;按 Home 键把应用退到后台,再点击桌面图标回来,界面却回到了 Flutter 页面,而不是刚才的小程序页面。
原因
uni 小程序 SDK 在 Android 端默认把小程序页面跑在一个独立 Task 里。当应用被切到后台,系统为了节省资源,往往会把那个 Task 清理掉;重新启动时,Launcher 会拉起默认的入口 Activity(Flutter 的 MainActivity),于是您看到的就是 Flutter 页面,小程序 Task 已经消失。
解决思路
让小程序页面与 Flutter 页面处于同一 Task,或者保证再次启动时仍能找到并恢复小程序 Activity。
推荐做法
-
使用单 Task 模式
在 AndroidManifest.xml 里把承载小程序的 Activity(通常是 io.dcloud.unimp.sdk.activity.DCloudImpActivity 或其子类)的 launchMode 改为 singleTask 或 standard,并去掉 taskAffinity 的特殊配置,让它与 Flutter 主 Activity 处于同一 Task。
<activity
android:name="io.dcloud.unimp.sdk.activity.DCloudImpActivity"
android:launchMode="singleTask"
android:taskAffinity="" <!-- 与主包一致 -->
... />
-
在 Flutter 端统一路由
在 MainActivity 的 onCreate/onNewIntent 里判断是否需要恢复小程序。uni 小程序 SDK 提供了 API:
DCUniMPSDK.getInstance().isMiniProgramRunning();
DCUniMPSDK.getInstance().restartMiniProgram(); // 如果 SDK 版本支持
如果检测到小程序曾经打开过,就直接把 Intent 交给 SDK 处理,而不是继续加载 Flutter。
-
保活(可选)
如果业务要求后台长时间保持小程序状态,可在 Android 10 以下申请前台 Service,Android 10+ 使用“允许后台启动 Activity”白名单或 WorkManager 拉起,但这属于系统保活范畴,无法 100% 保证。
-
使用最新 SDK
4.87 之后的 uni 小程序 SDK 已优化后台恢复逻辑,建议升级到最新版本再验证。
简单验证步骤
- 修改 manifest → 重新打包。
- 打开小程序 → 按 Home → 在最近任务里选中应用 → 确认回到小程序页面。
- 若仍回到 Flutter,可在
MainActivity 打印 taskId 与小程序 Activity 的 taskId 对比,确保二者一致。
如仍有问题,可在 ask 社区 贴出 manifest 配置与启动代码,官方同学会进一步跟进。
1 个回复
Ask小助手 - Ask社区AI助手
问题现象
Flutter 通过事件通知 Android 原生层打开 uni 小程序(wgt),第一次能正常进入小程序页面;按 Home 键把应用退到后台,再点击桌面图标回来,界面却回到了 Flutter 页面,而不是刚才的小程序页面。
原因
uni 小程序 SDK 在 Android 端默认把小程序页面跑在一个独立 Task 里。当应用被切到后台,系统为了节省资源,往往会把那个 Task 清理掉;重新启动时,Launcher 会拉起默认的入口 Activity(Flutter 的 MainActivity),于是您看到的就是 Flutter 页面,小程序 Task 已经消失。
解决思路
让小程序页面与 Flutter 页面处于同一 Task,或者保证再次启动时仍能找到并恢复小程序 Activity。
推荐做法
使用单 Task 模式
在
AndroidManifest.xml里把承载小程序的 Activity(通常是io.dcloud.unimp.sdk.activity.DCloudImpActivity或其子类)的launchMode改为singleTask或standard,并去掉taskAffinity的特殊配置,让它与 Flutter 主 Activity 处于同一 Task。在 Flutter 端统一路由
在
MainActivity的onCreate/onNewIntent里判断是否需要恢复小程序。uni 小程序 SDK 提供了 API:如果检测到小程序曾经打开过,就直接把 Intent 交给 SDK 处理,而不是继续加载 Flutter。
保活(可选)
如果业务要求后台长时间保持小程序状态,可在 Android 10 以下申请前台 Service,Android 10+ 使用“允许后台启动 Activity”白名单或 WorkManager 拉起,但这属于系统保活范畴,无法 100% 保证。
使用最新 SDK
4.87 之后的 uni 小程序 SDK 已优化后台恢复逻辑,建议升级到最新版本再验证。
简单验证步骤
MainActivity打印taskId与小程序 Activity 的taskId对比,确保二者一致。如仍有问题,可在 ask 社区 贴出 manifest 配置与启动代码,官方同学会进一步跟进。
要回复问题请先登录或注册
公告
更多>相关问题