iOS4 请求更多后台时间

iOS不是真正的多任务系统,在用户按下Home按钮后,所有应用程序都会进入后台状态,并且大部分都会迅速进入暂停状态,应用程序的所有工作内存都在RAM中,在暂停时它完全不执行。因此,切换回这样的应用程序非常快。但是如果系统需要更多的内存给当前处于活动状态的应用程序,就有可能终结暂停状态的应用程序,它们的内存也将被释放。

一方面,应用程序在进入后台状态时,需要释放一些资源,使自身的暂停快照更小,从而减少从RAM中清除的风险,另一方面,为了避免被终结而丢失用户的数据,需要在用户离开时保存他们的进度信息,这些工作,需要在5秒钟内完成,不然会被系统认定有异常被强制退出。可能通过接收应用程序发送的通知(UIApplicationDidEnterBackgroundNotification)来触发处理,如果在处理代码中加上下面这条语句则必然会导致异常退出:

  1. [NSThread sleepForTimeInterval:10];  
可以通过一种方法来请求更多后台时间来避免此问题。假设接收通知而触发的处理方法是applicationDidEnterBackground:

  1. -(void)applicationDidEnterBackground{  
  2.     NSLog(@"%@",NSStringFromSelector(_cmd));  
  3.   
  4.     //得到当前应用程序的UIApplication对象  
  5.     UIApplication *app = [UIApplication sharedApplication];  
  6.   
  7.     //一个后台任务标识符  
  8.     UIBackgroundTaskIdentifier taskID;  
  9.     taskID = [app beginBackgroundTaskWithExpirationHandler:^{  
  10.         //如果系统觉得我们还是运行了太久,将执行这个程序块,并停止运行应用程序  
  11.         [app endBackgroundTask:taskID];  
  12.     }];  
  13.     //UIBackgroundTaskInvalid表示系统没有为我们提供额外的时候  
  14.     if (taskID == UIBackgroundTaskInvalid) {  
  15.         NSLog(@"Failed to start background task!");  
  16.         return;  
  17.     }  
  18.     NSLog(@"Starting background task with %f seconds remaining", app.backgroundTimeRemaining);  
  19.     [NSThread sleepForTimeInterval:10];  
  20.     NSLog(@"Finishing background task with %f seconds remaining",app.backgroundTimeRemaining);  
  21.     //告诉系统我们完成了  
  22.     [app endBackgroundTask:taskID];  
  23. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值