在Flutter中使用后台任务调度(APP在后台保活)

这篇具有很好参考价值的文章主要介绍了在Flutter中使用后台任务调度(APP在后台保活)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言
在移动应用开发中,有时我们希望应用能够在后台执行一些任务,例如定期更新数据、推送通知,或者保持与服务器的持久连接。在Flutter中,通过后台调度任务(Background Fetch)可以实现这一目标,确保应用在后台仍然能够保持活跃状态。本文将介绍如何在Flutter应用中配置后台任务调度,以便持续运行你的应用。
背景
在移动应用中,当应用进入后台(用户切换到其他应用或锁屏)时,通常会进入休眠状态以节省系统资源。然而,有些应用可能需要在后台执行一些关键任务,例如定期更新数据或保持与服务器的通信。这就是后台任务调度发挥作用的地方。
使用Background Fetch实现

一、导入依赖

1.在Flutter/pubspec.yaml中添加以下内容:

 background_fetch: ^1.1.6
 //运行flutter pub

2.在Android/build.gradle中添加以下内容:

 maven {
    // [required] background_fetch
    url "${project(':background_fetch').projectDir}/libs"
 }

3.在Android/AndroidManifest 中添加以下内容:

如果您希望通过 forceAlarmManager: true 对事件进行精确调度,则 Android 14 (SDK 34)
已限制使用。如需继续在 Android 14 中使用精确的事件计时功能,您可以手动将此权限添加到 AndroidManifest 中。

<uses-permission android:minSdkVersion="34" android:name="android.permission.USE_EXACT_ALARM" />

1.后台任务调度权限
2.网络访问权限(如果应用在后台需要网络访问)
3.电池状态权限(如果应用在后台需要检查电池状态)
4.存储权限(如果应用在后台需要访问存储)

<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.BATTERY_STATS" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

二、 配置后台任务

void startBackgroundFetch() {
  BackgroundFetch.start().then((int status) {
    Global().writeLog('[BackgroundFetch] start success: $status');
  }).catchError((e) {
    Global().writeLog('[BackgroundFetch] start FAILURE: $e');
  });
}

Future<void> initPlatformState() async {
  int status = await BackgroundFetch.configure(
    BackgroundFetchConfig(
      	minimumFetchInterval: 15,
        stopOnTerminate: false,
        enableHeadless: true,
        requiresBatteryNotLow: false,
        requiresCharging: false,
        requiresStorageNotLow: false,
        requiresDeviceIdle: false,
        requiredNetworkType: NetworkType.ANY
      	// 更多配置项...
    ),
    (String taskId) async {  // <-- Event handler
      // 处理后台任务事件
      // ...
		switch(taskId){
       	  case 'com.mqtt.mqttConnect':
       	  
          break;
      }
      // 完成任务
      BackgroundFetch.finish(taskId);
    },
    (String taskId) async {  // <-- Task timeout handler
      // 处理任务超时
      // ...

      // 完成任务
      BackgroundFetch.finish(taskId);
    },
  );
  // 配置定时任务
  BackgroundFetch.scheduleTask(TaskConfig(
    taskId: 'com.mqtt.mqttConnect',
    delay: 5000,       // 毫秒
    forceAlarmManager: true,
    periodic: true
  ));
  Global().writeLog('[BackgroundFetch] configure success: $status');

  if (!mounted) return;
}

  1. ‘minimumFetchInterval’:
  • 类型:‘int’
  • 意义:指定两次后台任务之间的最小时间间隔,单位是分钟。设置这个属性可以避免应用过于频繁地在后台执行任务,从而减少对系统资源的占用。
  1. ‘stopOnTerminate’:
  • 类型:‘bool’
  • 意义:确定当应用被终止时是否停止后台任务。如果设置为’true’,则在应用被终止时,后台任务也将停止。
  1. ‘enableHeadless’:
  • 类型:‘bool’
  • 意义:指定是否启用无界面的后台任务执行。如果设置为’true’,则即使应用处于后台,也可以执行后台任务。
  1. ‘requiresBatteryNotLow’:
  • 类型:‘bool’
  • 意义:确定后台任务是否要求设备电量不低。如果设置为’true’,则只有在设备电量充足时才执行后台任务。
  1. ‘requiresCharging’:
  • 类型:‘bool’
  • 意义:确定后台任务是否要求设备正在充电。如果设置为’true’,则只有在设备正在充电时才执行后台任务。
  1. ‘requiresStorageNotLow’:
  • 类型:‘bool’
  • 意义:确定后台任务是否要求设备存储空间不低。如果设置为’true’,则只有在设备存储空间充足时才执行后台任务。
  1. ‘requiresDeviceIdle’:
  • 类型:‘bool’
  • 意义:确定后台任务是否要求设备处于空闲状态。如果设置为’true’,则只有在设备空闲时才执行后台任务。
  1. ‘requiredNetworkType’:
  • 类型:‘NetworkType’
  • 意义:指定后台任务所需的网络类型。可以选择’NetworkType.ANY’(任何网络类型)、‘NetworkType.UNMETERED’(非计量网络,如Wi-Fi)等。该属性可以帮助控制在何种网络条件下执行后台任务。

三、启动后台任务

最后,我们需要在应用中的适当时机启动后台任务:

initPlatformState();
startBackgroundFetch();

总结
通过使用Flutter的background_fetch插件,我们可以轻松地配置和处理后台任务,确保应用在后台持续运行。这为开发者提供了更多可能性,使得一些关键任务能够在用户不直接使用应用时仍然保持活跃。当然,使用后台任务时需要注意系统资源消耗和电池寿命,以确保用户体验和设备性能的平衡。希望本文能够帮助你更好地理解如何使用后台任务调度来增强你的Flutter应用。如有任何疑问或建议,请随时留言!文章来源地址https://www.toymoban.com/news/detail-762912.html

到了这里,关于在Flutter中使用后台任务调度(APP在后台保活)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • XXL-JOB 任务调度中心 后台任意命令执行漏洞

    在日常开发中,经常会用定时任务执行某些不紧急又非常重要的事情,例如批量结算,计算当日的订单量,当日的成本收入等。当存在大量定时任务的时候,任务的管理也会成为一个比较头痛的问题。xxl-job,就是一个比较成熟的分布式任务调度平台。XXL-JOB 任务调度中心系统

    2024年02月08日
    浏览(44)
  • flutter开发实战-WidgetsBinding监听页面前台后台退出状态

    flutter开发实战-WidgetsBinding监听页面前台后台退出状态 在开发过程中,经常监听页面前台后台退出状态,这里用到了WidgetsBinding WidgetsBinding是Flutter中最重要的Binding之一,它提供了与Widget树的交互。在Flutter中,所有的UI都是Widget,从最简单的文本到最复杂的布局,都可以通过

    2024年02月13日
    浏览(31)
  • Flutter:WebSocket封装-实现心跳、重连机制

    前言Permalink Flutter简介 Flutter 是 Google推出并开源的移动应用开发框架,主打跨平台、高保真、高性能。开发者可以通过 Dart语言开发 App,一套代码同时运行在 iOS 和 Android平台。 Flutter提供了丰富的组件、接口,开发者可以很快地为 Flutter添加 native扩展。同时 Flutter还使用 Nat

    2024年02月10日
    浏览(52)
  • 【flutter】flutter如何让app内字体大小不随着系统改变而改变

    如果我们不特意设置,flutter开发的app他的字体大小是会跟着系统设置的字体大小而改变,这样就会导致页面出现布局错乱问题,那么如何解决这个问题呢?我也搜索了相关资料,有两个常用也是网络上搜集到比较多的方法,还有一个是我自己使用的比较简单粗暴但是我认为方

    2024年02月15日
    浏览(52)
  • flutter 设置app图标

    使用插件 flutter_launcher_icons 在 pubspec.yaml 配置文件中 加入 dev_dependencies dev_dependencies:   flutter_launcher_icons: \\\"^0.13.1\\\" 准备好app得 icon 图标 其中icon的名字为icon.png 创建assets文件夹 和子文件夹icon iamge 配置静态资源路径 完整配置如下  flutter clean 清理后 重新安装依赖 重要得一步

    2024年02月12日
    浏览(38)
  • Flutter:使用url_launcher打开外部浏览器、拨打电话、发送短信、打开第三方app、打开应用商店下载应用

    Flutter中的 url_launcher 是一个用于打开URL的插件。它允许在Flutter应用程序中打开网址、发送电子邮件、拨打电话等操作。使用 url_launcher 插件,可以轻松地在应用程序中集成各种URL操作。 官方地址 https://pub-web.flutter-io.cn/packages/url_launcher 安装 打开网址 这里有两个注意点: 模拟

    2024年02月08日
    浏览(82)
  • 【Android安全】Flutter app逆向

    参考:https://www.bilibili.com/video/BV1SM41147g5 flutter app特征: lib/armeabi-v7a/下面有libapp.so和libflutter.so 逆向分析工具: 看雪:Flutter逆向助手 可以解析libapp.so文件,将其转换成dart文件 将libapp.so导入到手机,然后打开手机上的 flutter逆向助手 选中libapp.so,解析,得到dart文件 (注意要

    2024年02月13日
    浏览(40)
  • 强大的Flutter App升级功能

    注意:无特殊说明,Flutter版本及Dart版本如下: Flutter版本: 1.12.13+hotfix.5 Dart版本: 2.7.0 应用程序升级功能是App的基础功能之一,如果没有此功能会造成用户无法升级,应用程序的bug或者新功能老用户无法触达,甚至损失这部分用户。 对于应用程序升级功能的重要性就无需赘

    2024年04月15日
    浏览(45)
  • 某Flutter-APP逆向分析

    图例: Flutter 打包后的so文件所在位置 使用IDA打开 libflutter.so文件,在 Srings window中搜索 ssl_server字符串,通过交互引用,可以查找到具体的引用函数,如下所示: 主要思路:Flutter框架通过中间人proxy无法拦截到数据包,需绕过其对证书绑定的判断。通过对libflut

    2024年02月13日
    浏览(35)
  • Flutter Add to App 问题记录

    前一阵应用中接入了 Flutter ,使用的是官方的 Multiple Flutter Engine管理方案,目前线上运行良好,这里整理一下遇到的问题。 将 Flutter 集成到现有应用整体来说没有什么问题,按照文档的说明结合demo操作就行。接入后多语言,深色模式也可以和原生部分一样正常运行。但还是

    2024年02月13日
    浏览(40)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包