9

大きなビデオをAmazons3バケットにアップロードする必要があるアプリケーションがあります。NSOperationQueueによって規制されているNSOperationsを使用して、並行タスクを実行しています。

小さいビデオ(200 Mb未満)をアップロードするときに問題はありません。しかし、問題は、大きなビデオをアップロードしようとすると、10分後にアップロードプロセスが中断されることです。

私はすでに beginBackgroundTaskWithExpirationHandler:^10分のウィンドウを取得するために使用しています。このタイムアウト期間を延長する適切な方法は何ですか?

どういうわけかこのタイムアウトを延長できた場合、Appleはアプリを拒否しますか?

AppDelegate現在、iPhoneのリンクを参照して作成した次のコードがあります-イベントをポーリングするためのバックグラウンド

  - (void)applicationDidEnterBackground:(UIApplication *)application 
{

    UIApplication*    app = [UIApplication sharedApplication];
    dispatch_block_t expirationHandler;

    expirationHandler = ^{
        bgTask = [app beginBackgroundTaskWithExpirationHandler:expirationHandler];
    };

    bgTask = [app beginBackgroundTaskWithExpirationHandler:expirationHandler];
}

このコードを使用すると、バックグラウンドタスクが中断されることはありません。有効期限ハンドラーの内部でわかるように、無限に実行されるタスクにつながる別のバックグラウンドタスクイベントを開始しました。アップロードが完了したらバックグラウンドタスクを終了するロジックを記述できますが、このアプローチには疑問があります。

皆さんはどう思いますか?

どういうわけかハックですか?Appleは次のアプローチでアプリを拒否しますか?

4

2 に答える 2

2

それはハッキッシュのようですが、悪くはありませんIMHO(反対):D

アップルがそれを通過させれば、あなたは金色ですが、実際にはあなたはbgタスクを悪用しています

ところで:それでも、iOSはあなたをキャンセルするかもしれません!+他のアプリのパフォーマンスに影響を与える可能性があるため、CPUやメモリを大量に消費する作業は行わないでください

于 2012-11-28T08:42:21.457 に答える
2

バックグラウンドタスクの背後にある考え方は、アプリケーションがバックグラウンドで継続的に実行されないようにすることです。言い換えれば、Appleが設定した制限を回避しようとすると、Appleはあなたのアプリケーションを拒否する根拠があります。

彼らがこれを行うかどうかという質問には、Appleだけが答えることができます。ただし、Daij-Djanが言及しているように、アプリケーションが強制終了される可能性のある状況は他にもあります。

数か月前、私は同様の状況に直面しました。つまり、アプリケーションが大きなファイルをS3バケットにアップロードする必要がありました。解決策は、マルチパートアップロードを使用して、アプリケーションがアクティブになるたびにアップロードプロセスが再開されるようにすることです。マルチパートアップロードの詳細については、APIリファレンスをご覧ください。

于 2012-11-28T10:29:02.327 に答える