2009-09-16 10 views
7

すべてのUIWebViewは1つのWebスレッドを共有します。UIWebViewがブロックをブロックしてWebスレッドをロックしようとすると、メインスレッドがフリーズしないようにする

init -edをスーパービューなどから削除した場合、メインスレッドのメインスレッドからブロッキング方式でロックして、メインスレッドの実行ループを一時的にフリーズしようとします。

ウェブスレッドがビジー状態の場合、長い同期の間にXMLHttpRequest、これは長い時間メインスレッドをブロックする可能性があります。

これを回避する手段はありますか?

もし私がUIWebViewを変更することができたら、私はロックの試みをノンブロッキングにしたいと思いますが、明らかにそうではないので、他の巧妙なアイデアを探しています。

答えて

6

長いとそれの短いです:何もしていないことをブロックにかなりの時間のためのウェブスレッド(window.alertwindow.promptXMLHttpRequest.open('GET', url, false)、おそらく他の人)も

、ウェブスレッドをロックするメソッドを呼び出す避けます制御が実行ループに戻されるとすぐにウェブスレッドがロック解除されるので、すぐに時間がかかる何かをやっている。 (例:-[UITextView setText:]を呼び出し、メインスレッドで同期してファイルを読む)

+0

ページが低速の同期XHRを実行する場合、MobileSafariはどうなりますか?私はそれをテストしていないが、それはちょうど凍結か何ですか? –

+0

要求の間、Webスレッドのロックを取得します。メインスレッドがロックを取得しようとすると、要求が完了するまで待機する必要があります(またはタイムアウト) – rpetrich

+1

また、非同期XHRを使用する場合、これはもはや問題になりません(つまりxhr。 – rpetrich

0

クロスドメインポリシーエラーにつながるので、同期xhrを作成することはできません。

関連する問題