网站首页的动态怎么做,网站建设app是什么,服务型网站建设的主题,推广网站详细教程一、概览1.从iOS4.0开始#xff0c;系统添加了多任务特征#xff0c;允许应用在按下Home键之后#xff0c;继续执行后台任务。大部分应用在进入后台之后就进入了挂起状态#xff0c;只有那些为用户提供重要服务的App能够在进入后台之后继续运行一段时间。2.一般情况下…一、概览1.从iOS4.0开始系统添加了多任务特征允许应用在按下Home键之后继续执行后台任务。大部分应用在进入后台之后就进入了挂起状态只有那些为用户提供重要服务的App能够在进入后台之后继续运行一段时间。2.一般情况下我们应该尽可能的避免让我们的应用在进入后台之后继续执行代码。如果必须要执行后台任务推荐使用以下几种方式(1)需要至少实现一种指定的用户服务这类服务可以获得比较长的后台运行时间。(2)执行有限时长的任务。(3)使用本地通知。二、在执行多任务之前首先需要判断系统是否支持多任务 UIDevice* device [UIDevice currentDevice]; BOOL backgroundSupported NO; if ([device respondsToSelector:selector(isMultitaskingSupported)]){ backgroundSupported device.multitaskingSupported; }三、使用指定的用户服务来启动后台任务1.在Info.plist中添加UIBackgroundModes键值它包含一个或多个string的值指定App需要的后台服务如果不指定相关的值服务将不能在后台执行。2.可用的后台服务包含一下几个类型(1)音频播放服务对应字符串audio。(2)定位服务对应字符串location。(3)基于因特网的电话服务对应字符串voip。(4)Newsstand后台下载服务对应字符串newsstand-content。(5)硬件访问服务对应字符串external-accessory。(6)蓝牙访问服务对应字符串bluetooth-central。(7)外围模式的蓝牙交流服务对应字符串bluetooth-peripheral。3.前面的每一个值都让系统知道应用需要在合适的时间被唤醒去响应相关的事件。也就是说添加了对应的字符串值以后直接使用对应服务的API实现服务即可后台任务会自动开启如果没有添加对应的字符串值即使使用对应的API实现了服务当应用进入后台状态服务会立即被终止。4.每种服务具体的实现方式可以参考苹果技术文档。四、执行有限时长的任务1.当应用进入后台状态之后可以申请一小段时间来完成任何重要的任务。调用UIApplication的类方法beginBackgroundTaskWithExpirationHandler此方法会延迟App进入挂起状态。2.beginBackgroundTaskWithExpirationHandler方法返回一个后台任务句柄。可以同时启动多个后台任务每个后台任务都对应一个句柄可以通过此句柄来判别对应的任务。3.beginBackgroundTaskWithExpirationHandler该方法的参数是一个block参数和返回值都为空当可用的后台运行时间趋近于0时此block会被调用。在此block中应该使用endBackgroundTask方法来结束后台任务。如果后台任务终止失败应用将会被强制关闭。此block在主线程同步调用。4.每一个beginBackgroundTaskWithExpirationHandler方法都必须对应一个endBackgroundTask方法。endBackgroundTask方法可以在非主线程安全的调用。5.当后台任务代码执行完毕之后也需要实时的结束后台任务。6.结束后台任务的规则首先检查任务句柄是不是等于UIBackgroundTaskInvalid如果不等于调用endBackgroundTask然后将任务句柄赋值为UIBackgroundTaskInvalid。7.通过UIApplication的backgroundTimeRemaining属性可以获知还有剩余多少后台运行时间。8.示例代码-(void)applicationDidEnterBackground:(UIApplication *)application{ //申请后台运行时间 bgTask [application beginBackgroundTaskWithExpirationHandler:^{ //清理没完成的任务 xxxxxxxxxxxxxxxxxxxxxx //结束任务 if(bgTask ! UIBackgroundTaskInvalid){ [application endBackgroundTask:bgTask]; bgTask UIBackgroundTaskInvalid; } }]; //开始执行任务 dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ //执行必要的任务以同步代码的方式。 xxxxxxxxxxxxxxxx //结束任务 if(bgTask ! UIBackgroundTaskInvalid){ [application endBackgroundTask:bgTask]; bgTask UIBackgroundTaskInvalid; } });}五、本地通知本地通知在iOS中通知的使用章节有介绍在这里就不说了。