Flutter应用能否在后台运行并执行定位、网络请求等相关操作?
Flutter后台定位及地理触发功能实现说明
基础能力说明
Flutter官方没有开箱即用的后台定位、后台任务执行能力,要实现后台场景下的定位更新、物品收集触发、服务端上报逻辑,需要结合原生平台能力适配,不用完全从零开发原生服务类,可直接使用社区成熟插件降低开发成本。
双端后台运行可行性
- 安卓端:只要申请到后台位置权限,搭配前台服务(常驻通知),就可以实现长时间后台定位更新、区域触发、网络上报逻辑,正常不会被系统主动回收。如果需要应用被划掉后仍能工作,可额外适配厂商的自启动、后台活动白名单权限。
- iOS端:申请到始终允许位置权限后,系统原生支持后台定位更新,也可使用地理围栏能力,在用户进入指定物品范围时唤醒应用执行短暂的上报逻辑,功耗表现更优。iOS对后台长时间运行的限制更严格,不要在后台执行无关的耗时操作,避免被系统挂起。
具体实现建议
插件选型
直接使用社区成熟的封装插件,无需自己手写原生服务代码:
- 后台任务管理用
flutter_background_service:封装了双端后台任务的创建、保活逻辑,可直接在Dart层写后台执行的代码 - 定位及地理围栏能力用
geolocator:封装了权限申请、前后台定位获取、距离计算、地理围栏监听的能力,可直接调用
核心配置要点
- 应用启动后优先申请对应位置权限:安卓需要申请
ACCESS_BACKGROUND_LOCATION权限,iOS需要在Info.plist中配置始终允许位置权限的说明文案 - 后台任务启动时,安卓端要绑定前台服务,展示常驻通知,明确告知用户应用正在后台获取位置,符合系统权限要求
- 建议提前把可收集物品的坐标缓存到本地,后台任务中定时获取定位后,直接和本地缓存坐标做距离计算,达到收集阈值后直接发起网络请求上报服务端即可,减少后台网络请求频次
注意事项
- 后台定位间隔不要设置太短,建议30秒以上,既降低功耗也避免被系统判定为异常耗电回收进程
- 安卓不同厂商对后台进程的限制差异较大,小米、华为、vivo等厂商的后台活动权限、自启动权限需要引导用户手动开启,否则应用划掉后后台任务会被终止
- iOS端如果用地理围栏能力触发收集逻辑,单个App最多可注册100个地理围栏,超出上限的话建议做动态替换,只保留用户当前位置附近的物品围栏
内容的提问来源于stack exchange,提问作者Janaka
相关产品推荐
相关产品推荐

