欢迎来到天天文库
浏览记录
ID:12190327
大小:19.53 KB
页数:6页
时间:2018-07-16
《ios之申请后台延时执行和做一个假后台的方法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、ios之申请后台延时执行和做一个假后台的方法我们知道,到我们程序从前台退到后台(安home)键后,将执行程序的委托方法。// 当应用程序掉到后台时,执行该方法-(void)applicationDidEnterBackground:(UIApplication *)application{ }我们已经知道:当一个 iOS 应用被送到后台,它的主线程会被暂停。你用 NSThread 的 detachNewThreadSelector:toTarget:withObject:类方法创建的线程也被挂起了。我
2、们假设有这么一种情况:当我们的应用程序从前台被送到了后台。这时候,我们的程序将执行委托方法 applicationDidEnterBackground。但是,这时候,应用程序只给了我们可怜的一点点时间(也就是秒级别的)来处理东西,然后,所有的线程都被挂起了。而实际中,我们可能需要更长的时间来完成我们的需要的必要操作:1.我们需要在应用程序推到后台时,能够有足够的时间来完成将数据保存到远程服务器的操作。2.有足够的时间记录一些需要的信息操作。怎么办?!因为我们需要的时间可能会有点长,而默认情况下,iOS没有
3、留给我们足够的时间。悲剧了……总需要有一个办法来解决~~~~向iOS申请,在后台完成一个Long-RunningTask任务当一个 iOS 应用被送到后台,它的主线程会被暂停。你用 NSThread 的 detachNewThreadSelector:toTarget:withObject:类方法创建的线程也被挂起了。如果你想在后台完成一个长期任务,就必须调用 UIApplication 的 beginBackgroundTaskWithExpirationHandler:实例方法,来向 iOS 借点时间
4、。默认情况下,如果在这个期限内,长期任务没有被完成,iOS 将终止程序。怎么办?可以使用 beginBackgroundTaskWithExpirationHandler:实例方法,来向 iOS 再借点时间。既然是借时间,那么就需要有一些约定俗成的方式。先贴代码吧:1.项目的AppDelegate.h文件中 声明一个 UIBackgroundTaskIdentifier ,相当于一个借据吧。告诉iOS,我们的程序将要借更多的时间来完成 Long-RunningTask 任务。 @property (non
5、atomic, unsafe_unretained) UIBackgroundTaskIdentifier backgroundTaskIdentifier;@property (nonatomic, strong) NSTimer *myTimer;2.项目的AppDelegate.m文件中 1.注意在applicationDidEnterBackground方法中,完成借据的流程 即:self. backgroundTaskIdentifier =[application beginBackgroun
6、dTaskWithExpirationHandler:^( void){ [self endBackgroundTask]; }]; // 当应用程序掉到后台时,执行该方法 // 当一个 iOS 应用被送到后台,它的主线程会被暂停。你用 NSThread 的 detachNewThreadSelector:toTarget:withObject:类方法创建的线程也被挂起了。// 如果你想在后台完成一个长期任务,就必须调用 UIApplication 的 beginBackgroundTask
7、WithExpirationHandler:实例方法,来向 iOS 借点时间。// 默认情况下,如果在这个期限内,长期任务没有被完成,iOS 将终止程序。// 怎么办?可以使用 beginBackgroundTaskWithExpirationHandler:实例方法,来向 iOS 再借点时间。-(void)applicationDidEnterBackground:(UIApplication *)application{ // 使用这个方法来释放公共的资源、存储用户数据、停止我们定义的定时器(ti
8、mers)、并且存储在程序终止前的相关信息。 // 如果,我们的应用程序提供了后台执行的方法,那么,在程序退出时,这个方法将代替applicationWillTerminate方法的执行。 // 标记一个长时间运行的后台任务将开始 // 通过调试,发现,iOS给了我们额外的10分钟(600s)来执行这个任务。 self.backgroundTaskIdentifier =[application be
此文档下载收益归作者所有