ios在后台完成一个长期任务-创新互联

    当一个iOS 应用被送到后台,它的主线程会被暂停。你用NSThread的detachNewThreadSelector:toTarget:withObject:类方法创建的线程也被挂起了。如果你想在后台完成一个长期任务,就必须调用UIApplication
的beginBackgroundTaskWithExpirationHandler:实例方法,来向iOS 借点时间。UIApplication的
backgroundTimeRemaining属性包含了程序完成他的任务可以使用的秒数。如果在这个期限内,长期任务没有被完成,iOS 将终止程序。每个对beginBackgroundTaskWithExpirationHandler:方法的调用,必须要相应的调用endBackgroundTask:方法(UIApplication的另一个实例方法)。也就是说,如果你向iOS 要更多时间来完成一个任务,你必须告诉iOS 你什么时候能完成那个任务,那时,你的程序将和其所有被暂停的线程被放入后台。

         当你的程序在前台时,UIApplication的backgroundTimeRemaining属性等于DBL_MAX常量,这是double类型可表示的大值(和这个值相当的integer 通常等于-1)。在iOS 被要求在程序被完全挂起之前给于更多的执行时间,这个属性指明了在完成任务前程序拥有多少秒。

        在程序中你可以多次调用beginBackgroundTaskWithExpirationHandler:方法。要记住的重点是,当iOS 为你的程序返回一个token 或者任务标识(task identifier)时,你都必须调用endBackgroundTask:方法,在运行的任
务结束时,用来标志任务结束。如果你不这么做的话,iOS 会终止你的程序。

       在后台时,程序不应该执行完全的功能,也不应该处理大量数据。事实上,他们只应该完成一个长期任务。

比如,一个程序正在调用一个web service API,并且还没有从服务器上的那个API接收到响应。在此期
间,如果程序被送入后台,它可以请求更多的时间,直到它从服务器收到响应。一旦响应被接收,程序必须保存其状态,并调用UIApplication的endBackgroundTask:实例方法将任务标记为完成。

为京山等地区用户提供了全套网页设计制作服务,及京山网站建设行业解决方案。主营业务为做网站、成都网站制作、京山网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!

下面我们看看代码实现的步骤:

1、定义一个任务标识

  1. @property (nonatomic, unsafe_unretained) UIBackgroundTaskIdentifier backtaskIdentifier; 

2、当ios app 进入后台时,会自动调用appdelegate的

     - (void)applicationDidEnterBackground:(UIApplication *)application  方法,在这里我们编写要执行的任务

  1. - (void)applicationDidEnterBackground:(UIApplication *)application 

  2. //定义要完成的任务 ,开始执行,
  3. ......
  4.  
  5. //返回一个任务标识
  6. self.backtaskIdentifier
  7. // do something 。。。
  8.  
  9. //结束该任务
  10. //将任务标识符标记为 UIBackgroundTasksInvalid,标志任务结束

 如上代码所示,我们在使用多任务的前提,一定是我们的系统支持多任务,可见检测任务的可用性是一项必不可少的步骤:

  1. - (BOOL) isMultitaskingSupported{ 
  2. result

 我们调用 beginBackgroundTaskWithExpirationHandler: (UIApplication的一个实例方法) 方法,为app 返回了一个token 或任务标识,那么我们必须调用  endBackgroundTask: (UIApplication的另一个实例方法)方法来结束该任务.

在后台任务的 完成处理者 (即beginBackgroundTaskWithExpirationHandler: 的块函数,)中,我们结束了任务,并进行必要的清理工作。

3、当我们的app回到前台的时候会调用- (void)applicationWillEnterForeground:(UIApplication *)application 方法,此时如果后台任务还在进行中我们就要结束他。

我想原理应该已经讲清楚了。本人刚学不久,不当之处敬请指出,以做修改,求共进。

另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。

网页题目:ios在后台完成一个长期任务-创新互联
URL地址:https://www.cdcxhl.com/article14/cogige.html

成都网站建设公司_创新互联,为您提供手机网站建设网站营销云服务器外贸建站响应式网站网站设计

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

成都网站建设