You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么启动Google Maps导航后后台运行的Flutter应用会被杀死?

Flutter旅游应用跳转Google Maps后台被杀问题解决方案
  • 优先排查Android端权限配置,release模式下需在android/app/src/main/AndroidManifest.xml中补充以下权限声明,同时在应用启动时主动引导用户授权:
<!-- 申请忽略电池优化权限 -->
<uses-permission android:name="android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" />
<!-- 前台服务相关权限 -->
<uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
<uses-permission android:name="android.permission.FOREGROUND_SERVICE_LOCATION" />
<!-- 后台位置获取权限 -->
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />

多数厂商定制系统默认会禁止普通应用后台长期运行,和应用内存占用无关,拿到忽略电池优化权限后进程优先级会大幅提升。

  • 补充release模式混淆白名单配置,避免后台服务相关代码被混淆工具误删,在android/app/proguard-rules.pro中添加以下规则:
# map_launcher插件混淆白名单
-keep class com.alexmiller.map_launcher.** { *; }
# 后台位置服务插件混淆白名单,如使用其他插件替换对应包名即可
-keep class com.lyokone.location.** { *; }
# 所有系统服务子类避免混淆
-keep class * extends android.app.Service { *; }
  • 调整后台位置服务启动模式,不要使用纯后台服务,强制开启前台服务模式,在服务运行期间常驻通知栏,将进程优先级提升至和前台应用同级,示例代码如下:
// 以background_location插件为例,其他位置服务插件同理开启前台配置
await BackgroundLocation.startLocationService(
  foreground: true,
  notificationTitle: "后台运行中",
  notificationMsg: "正在为您保留导航相关数据",
  notificationIcon: "@mipmap/ic_launcher",
);
  • 调整跳转Google Maps的启动参数,避免当前应用Activity被系统回收,跳转时指定正确的Intent启动Flag:
await MapLauncher.showMarker(
  mapType: MapType.google,
  coords: Coords(目标纬度, 目标经度),
  title: "目的地名称",
  extraParams: {'android_intent_flags': 'FLAG_ACTIVITY_NEW_TASK'},
);
  • 如果涉及iOS端,需检查Info.plist中是否开启了后台位置运行权限,同时确认release模式下权限申请逻辑和debug模式一致,iOS未授权后台位置权限时,应用退后台30秒后会被系统自动挂起销毁。

内容的提问来源于stack exchange,提问作者BOUACHRA Zakaria

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 02:48:01