0

アプリケーションがバックグラウンド状態になったときにスレッドを作成して開始する必要があるという要件があります。作成されたスレッドの機能は、ローカルDBからデータをフェッチしてサーバーにアップロードすることであり、UIを更新する必要はありません。私の質問は次のとおりです。

  1. applicationWillResignActiveメソッドまたはメソッドのいずれかで、スレッドを正確にどこに作成する必要がありapplicationDidEnterBackgroundますか?
  2. スレッドを作成する最良の方法はどれですか? 方法またはGCDまたはPosix方法ですか?

私が試したこと

  1. 私はすでにAndroidに取り組んでいるので、このシナリオをどのように達成できるかはわかっていますが、iOSは初めてなので、最初は少し混乱しています。
  2. NSThreadの概念を試してみましたが、機能しませんでした。以下は、私の知る限りで書いたコードです。

    - (void)applicationWillResignActive:(UIApplication *)application {
         [NSThread detachNewThreadSelector:@selector(FetchReportFromDBAndUpload) toTarget:self withObject:nil];
    }
    
    - (void)FetchReportFromDBAndUpload {
         NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
         //Check for internet connection and fetch data from DB and upload to server
         [pool release];
    }
    

これはスレッドを作成する正しい方法ですか、それともいくつかの変更を行う必要がありますか?そうでない場合は、これを達成する方法を教えてください。前もって感謝します

4

1 に答える 1

1

AppDelegate のメソッドからクラスのbeginBackgroundTaskWithExpirationHandler:メソッドを呼び出す必要があります。このメソッドは、タスクをバックグラウンド タスクとしてマークするため、アプリがバックグラウンド状態になったときにシステムがタスクを強制終了しません。(VoiceIP、音楽の再生、GPS 追跡に関連しないバックグラウンド タスクは、バックグラウンドでの実行時間が 10 分程度に制限されていることに注意してください。つまり、これらのタスクは永久に実行されるわけではありません。)UIApplicationapplicationDidEnterBackground:

詳細情報とコード例は次のとおりです: http://developer.apple.com/library/ios/#documentation/iphone/conceptual/iphoneosprogrammingguide/ManagingYourApplicationsFlow/ManagingYourApplicationsFlow.html

于 2013-03-02T13:08:17.277 に答える