我的应用程序中有一种解密和加密方法。当应用程序进入后台时,文件会被加密。如果应用程序进入前台,则文件将被解密。这就是主要的故事。这两个部分都需要一些时间和大量的内存。在后台,我正在做这样的事情。
encryptionTaskId = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^(void) {
// Wwe took too long. Stop task.
}];在applicationWillEnterForeground中,我正在执行以下操作:
if (encryptionTaskId != UIBackgroundTaskInvalid) {
[[UIApplication sharedApplication] endBackgroundTask:encryptionTaskId];
}我认为这很好用。但我的问题是,在applicationWillEnterForeground解密文件的过程中,有人点击了home按钮。applicationDidEnterBackground再次启动,但我的解密还没有完成。处理这个问题的最好方法是什么?是否也可以等到前台完成?
发布于 2012-12-11 00:03:58
您是否能够检测到文件当前是否正在被访问或被加密/解密?如果是,请创建一个计时器,以便在前一种方法停止后的几秒钟内再次执行加密/解密。
更新:
请参阅您应该能够使用beginBackgroundTaskWithExpirationHandler:的http://developer.apple.com/library/ios/DOCUMENTATION/iPhone/Conceptual/iPhoneOSProgrammingGuide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html#//apple_ref/doc/uid/TP40007072-CH4-SW28。这将为你赢得额外的时间,在你的应用程序移到后台之前完成处理。
更新2:
确保encryptionTaskId是实例变量
- (void)applicationDidEnterBackground:(UIApplication *)application
{
encryptionTaskId = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
[[UIApplication sharedApplication] endBackgroundTask:bgTask];
encryptionTaskId = UIBackgroundTaskInvalid;
}];
[[UIApplication sharedApplication] endBackgroundTask:bgTask];
encryptionTaskId = UIBackgroundTaskInvalid;
}然后,在applicationDidEnterForeground中,您需要检查encryptionTaskId是否仍在工作,如果是,请创建一个计时器,稍后再尝试对其进行解码。
https://stackoverflow.com/questions/13803805
复制相似问题