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

StackOverflow https://stackoverflow.com/questions/1431594

  •  07-07-2019
  •  | 
  •  

Вопрос

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

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

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

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

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

Это было полезно?

Решение

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

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top