1

たとえば、50 個のオブジェクトをレンダリングし、それぞれをファイルとして保存するタスクがあります。バックグラウンドで実行を継続し、タスクが完了するとユーザーに通知するように設定されています。フォアグラウンドでは、進行状況バーが表示され、すべての進行状況をユーザーに示します。

ファイルのレンダリングと書き込みはすべて、GCD を使用してカスタム バックグラウンド スレッドで行われます。プログレス バーを更新するために、main_queue の dispatch_async が呼び出されます。


これが私の問題です...

ユーザーがバックグラウンドに入ると、タスクは計画どおりに続行され、さらにバックグラウンドにある場合は、完了するとユーザーに通知されます。しかし、ユーザーがすぐに戻ってきて、アプリがまだレンダリング/書き込み中の場合、私/ユーザーは進行状況とすべてを確認することを期待します >>> それは起こりません。プログレス バーを更新する私の方法は、main_queue の dispatch_async を介して送信されますが、バックグラウンドで送信した「renter/writing」タスクが完了し、 ExpirationHandler が実行されました。

「applicationWillEnterForeground:」メソッドで、アプリに「endBackgroundTask:」を実行し、インスタンス (=self.backgroundTask) を「UIBackgroundTaskInvalid」に設定する必要があることを伝えますが、違いはありません。

私の質問...

アプリを閉じたときにバックグラウンド (beginBackgroundTaskWithExpirationHandler:) に送信したタスク (GCD カスタム バックグラウンド スレッドで実行) の制御を取り戻す方法はありますか?

および/または

特にコントロールを取り戻す必要はありませんが、別の方法で設定する必要はありますか?

4

0 に答える 0