Избегайте зависаний основного потока, когда UIWebView пытается блокировать веб-поток - PullRequest
7 голосов
/ 16 сентября 2009

Все UIWebViews имеют общий веб-поток.

Когда один из них init -едан, удален из суперпредставления и т. Д., Они попытаются заблокировать веб-поток из основного потока блокирующим образом, тем самым временно заморозив цикл выполнения основного потока.

Если веб-нить занята, например, при выполнении длинного синхронного XMLHttpRequest это может заблокировать основной поток на длительное время.

Есть ли способ избежать этого?

Если бы я мог изменить UIWebView, я бы просто сделал попытку блокировки неблокируемой, но, очевидно, это не так, поэтому я ищу другие умные идеи.

Ответы [ 2 ]

6 голосов
/ 16 сентября 2009

Короче говоря: избегайте делать что-либо, что блокирует веб-поток в течение значительного периода времени (window.alert, window.prompt, XMLHttpRequest.open('GET', url, false), возможно, другие)

Кроме того, избегайте вызова методов, которые блокируют веб-поток, а затем немедленно выполняйте что-то, что занимает много времени, поскольку веб-поток разблокируется только после того, как управление возвращается в цикл выполнения. (Пример: вызов -[UITextView setText:] и синхронное чтение файла в главном потоке)

0 голосов
/ 29 мая 2012

вы не можете сделать синхронный xhr, так как это приведет к ошибкам междоменной политики.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...