首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >applicationWillEnterForeground / applicationDidEnterBackground协同工作

applicationWillEnterForeground / applicationDidEnterBackground协同工作
EN

Stack Overflow用户
提问于 2012-12-10 23:21:38
回答 1查看 555关注 0票数 0

我的应用程序中有一种解密和加密方法。当应用程序进入后台时,文件会被加密。如果应用程序进入前台,则文件将被解密。这就是主要的故事。这两个部分都需要一些时间和大量的内存。在后台,我正在做这样的事情。

代码语言:javascript
复制
encryptionTaskId = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^(void) {
    // Wwe took too long. Stop task.
}];

在applicationWillEnterForeground中,我正在执行以下操作:

代码语言:javascript
复制
if (encryptionTaskId != UIBackgroundTaskInvalid) {
    [[UIApplication sharedApplication] endBackgroundTask:encryptionTaskId];
}

我认为这很好用。但我的问题是,在applicationWillEnterForeground解密文件的过程中,有人点击了home按钮。applicationDidEnterBackground再次启动,但我的解密还没有完成。处理这个问题的最好方法是什么?是否也可以等到前台完成?

EN

回答 1

Stack Overflow用户

发布于 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是实例变量

代码语言:javascript
复制
- (void)applicationDidEnterBackground:(UIApplication *)application 
{
    encryptionTaskId = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
        [[UIApplication sharedApplication] endBackgroundTask:bgTask]; 
        encryptionTaskId = UIBackgroundTaskInvalid;
    }];

    [[UIApplication sharedApplication] endBackgroundTask:bgTask]; 
    encryptionTaskId = UIBackgroundTaskInvalid;
}

然后,在applicationDidEnterForeground中,您需要检查encryptionTaskId是否仍在工作,如果是,请创建一个计时器,稍后再尝试对其进行解码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13803805

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档