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

Flutter应用终止时如何运行代码?无需三方服务实现通知接收

Flutter 技术问题解答

1. 让代码在应用终止状态下运行的方案

应用终止(进程被系统或用户杀死)时,Flutter 代码无法主动启动运行,只能依赖系统有限的触发机制,且不同平台限制差异明显:

  • Android 平台:
    • 仅能通过系统广播接收器触发少量场景(如开机完成、网络状态突变),但 Android 8.0+ 对后台广播做了严格限制,大部分隐式广播无法接收。
    • 不使用 Workmanager 或前台服务的话,几乎没有稳定执行后台任务的方案——系统会优先回收后台进程,非前台服务的后台任务极易被杀死。
  • iOS 平台:
    • 仅支持通过 APNs 推送触发:要么是用户可见的推送通知(点击可唤醒应用执行代码),要么是静默推送(苹果对其频率和时长有严格限制,无法保证 100% 触发)。
    • 完全终止状态下,无其他系统机制能主动唤醒应用执行代码。

2. 无需 Firebase/Workmanager/前台服务,用 REST API + flutter_local_notifications 接收通知的可行方案

你的现有代码是从本地数据库拉取数据后显示通知,但核心问题是应用后台/终止时缺少触发拉取的时机,结合限制给出以下方案:

方案思路:「前台定时拉取」+「厂商推送触发」结合

  • 前台状态下:
    用 Timer.periodic 定时调用 getNotifications 方法,拉取最新通知数据并显示:
    Timer? _notificationTimer;
    
    void initState() {
      super.initState();
      // 前台每5分钟拉取一次(可按需调整间隔)
      _notificationTimer = Timer.periodic(const Duration(minutes: 5), (timer) {
        getNotifications();
      });
    }
    
    @override
    void dispose() {
      _notificationTimer?.cancel();
      super.dispose();
    }
    
    void getNotifications()async{
      var notifications = await Db.get("notifications","/*Notification id*/");
      // 遍历通知数据逐个显示
      for (var notification in notifications) {
        await FlutterLocalNotificationsPlugin().show(
          notification.id,
          notification.title,
          notification.body,
          const NotificationDetails(
            android: AndroidNotificationDetails('channel_id', 'channel_name'),
            iOS: IOSNotificationDetails(),
          ),
        );
      }
    }
    
  • 后台/终止状态下:
    借助厂商推送服务(Android 集成小米、华为、OPPO 等厂商推送 SDK,iOS 用 APNs),后端有新通知时直接通过推送服务下发到设备:
    • 通知到达时,系统会直接显示原生通知(无需 Flutter 进程运行)。
    • 用户点击通知唤醒应用后,调用 getNotifications 拉取最新数据,同步本地通知状态。

关键说明

  • 不使用 Workmanager/前台服务的话,无法在后台稳定定时拉取 REST API——Android 限制后台任务,iOS 不允许后台持续运行定时任务。
  • 不用 Firebase 的话,需单独集成各厂商推送服务(Android)和 APNs(iOS),虽增加开发工作量,但能实现后台/终止状态下的通知触达。

内容的提问来源于stack exchange,提问作者abdifatah nour

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 14:52:56