Background Fetch

 

Background Fetch 是iOS7开始提供的一个数据拉取机制,主要是用于需要频繁更新内容的应用,例如社交、新闻或者天气应用。当实现了这个机制,系统会学习用户使用应用的习惯,并尽量在用户下次打开应用之前,给应用一个后台启动(或者叫后台唤醒)的机会,让应用提前可以准备数据。例如,如果用户总是在下午1点打开应用,那么系统会学习到这个习惯,并尽量在1点之前触发Background Fetch。

这个机制实现起来很简单。

第一步,在Capacities -> Background Modes 选中 Background fetch。

 

也就是确保Info.plist中存在UIBackgroundModes,并存在fetch这一项。

代码块

  <key>UIBackgroundModes</key>
  <array>
    <string>fetch</string>
  </array>

第二步,在AppDelegate中调用-[UIApplication setMinimumBackgroundFetchInterval:]

代码块

[[UIApplication sharedApplication] setMinimumBackgroundFetchInterval:UIApplicationBackgroundFetchIntervalMinimum];

setMinimumBackgroundFetchInterval的参数类型是NSTimeInterval,但苹果建议只需要填写UIApplicationBackgroundFetchIntervalMinimum或UIApplicationBackgroundFetchIntervalNever,因为这个最低调用间隔的数值只是建议的数值,最终调度的频率还是系统控制。因此如果要启用Background fetch,传入UIApplicationBackgroundFetchIntervalMinimum;如果要禁用,传入UIApplicationBackgroundFetchIntervalNever。

第三步,实现AppDelegate的application:performFetchWithCompletionHandler:。

代码块

- (void)application:(UIApplication *)application performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{
    completionHandler(UIBackgroundFetchResultNewData);
//    completionHandler(UIBackgroundFetchResultNoData);
//    completionHandler(UIBackgroundFetchResultFailed);
}

进入这个回调后,我们可以通过completionHandler告诉系统“后台数据获取准备完成了,系统可以挂起进程了”。当调用completionHandler后,系统会立即挂起进程。

completionHandler的参数有三个UIBackgroundFetchResultNewData、NoData和Failed,这三个结果经过测试目前没发现明显区别,或许只是拿来关联学习用户行为的一个参数。

当应用后台启动(或唤醒)时,completionHandler必须在30秒内调用,否则系统会把进程kill。通过 completionHandler 也就可以控制进程的后台存活时长。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
background_fetch是一种在Flutter应用程序中实现后台任务处理的插件。它允许开发人员在应用程序处于后台或暂停状态时执行特定的代码。 通常情况下,当Flutter应用程序转入后台或暂停状态时,它会被系统暂停,并且无法执行任何代码。但是,通过使用background_fetch插件,我们可以定义一些需要在后台或暂停状态下执行的任务。 使用background_fetch的首要步骤是在pubspec.yaml中添加插件依赖。然后,我们可以使用Flutter的异步操作函数(例如Future和async/await)来定义任务。这些任务将会在应用程序处于后台或暂停状态时自动执行。 通过background_fetch,我们可以定期执行任务,例如更新数据、发送通知、与服务器通信等等。在设置任务的时间计划时,我们可以定义任务的延迟时间和间隔时间。延迟时间表示从应用程序切换到后台或暂停状态开始后,第一次执行任务所需的时间。间隔时间表示执行任务之间的间隔时间。 需要注意的是,background_fetch只能在支持后台任务处理的平台上使用,例如iOS和Android。此外,由于涉及到后台运行,我们需要确保应用程序的后台模式设置正确,并且用户已授予应用程序后台任务处理的权限。 总结来说,background_fetch是一个非常有用的Flutter插件,它使我们能够在应用程序处于后台或暂停状态时执行特定的代码。通过定义任务的时间计划和使用异步操作函数,我们可以实现定期执行任务的需求。请记住,在使用background_fetch时,需要确保应用程序的后台模式设置正确,并且用户已授予后台任务处理的权限。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值