0

アプリに復号化と暗号化の方法があります。アプリがバックグラウンドに入ると、ファイルが暗号化されます。アプリがフォアグラウンドに入った場合、ファイルは復号化されます。以上が本編です。どちらの部分も、ある程度の時間と多くのメモリを必要とします。バックグラウンドで、私はそのようなことをしています。

encryptionTaskId = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^(void) {
    // Wwe took too long. Stop task.
}];

applicationWillEnterForeground では、次のことを行っています。

if (encryptionTaskId != UIBackgroundTaskInvalid) {
    [[UIApplication sharedApplication] endBackgroundTask:encryptionTaskId];
}

私はそれがうまくいくと思います。しかし、私の問題は、ファイルの復号化home中に誰かがボタンをクリックしたときです。applicationWillEnterForeground再びapplicationDidEnterBackgroundが開始されますが、復号化は完了していません。それを処理する最良の方法は何ですか。フォアグラウンドが終了するまで待つこともできますか?

4

1 に答える 1

0

ファイルが現在アクセスされているか、暗号化/復号化されているかを検出できますか? その場合は、前の方法が停止してから数秒後に暗号化/復号化を再度行うためのタイマーを作成します。

アップデート:

http://developer.apple.com/library/ios/DOCUMENTATION/iPhone/Conceptual/iPhoneOSProgrammingGuide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html#//apple_ref/doc/uid/TP40007072-CH4-SW28を参照してくださいbeginBackgroundTaskWithExpirationHandlerを使用できるはずです: . これにより、アプリがバックグラウンドに移行する前に処理を完了するための余分な時間が得られます.

更新 2:

encryptionTaskIdインスタンス変数であることを確認してください

- (void)applicationDidEnterBackground:(UIApplication *)application 
{
    encryptionTaskId = [[UIApplication sharedApplication] beginBackgroundTaskWithExpirationHandler:^{
        [[UIApplication sharedApplication] endBackgroundTask:bgTask]; 
        encryptionTaskId = UIBackgroundTaskInvalid;
    }];

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

次に、まだ機能しているapplicationDidEnterForegroundかどうかを確認し、機能している場合encryptionTaskIdはタイマーを作成して、すぐに再試行してデコードします。

于 2012-12-10T16:03:58.250 に答える