代码之家  ›  专栏  ›  技术社区  ›  Jaka Jančar

当uiWebView试图阻止锁定Web线程时,避免主线程冻结

  •  7
  • Jaka Jančar  · 技术社区  · 15 年前

    所有UIWebView共享一个Web线程。

    当其中一个是 init -ed,从superview等移除,它们将尝试以阻塞的方式从主线程锁定web线程,从而临时冻结主线程的运行循环。

    如果Web线程正忙,例如在执行长时间同步时 XMLHttpRequest ,这可能会长时间阻塞主线程。

    有没有办法避免这种情况?

    如果我可以修改uiwebview,我只会使锁尝试不阻塞,但显然不是这样,所以我在寻找其他聪明的想法。

    2 回复  |  直到 12 年前
        1
  •  6
  •   rpetrich    15 年前

    它的长与短是:避免做任何会在相当长时间内阻塞Web线程的事情。( window.alert , window.prompt , XMLHttpRequest.open('GET', url, false) ,可能还有其他)

    另外,避免调用锁定Web线程的方法,然后立即执行一些花费很长时间的操作,因为只有当控件返回到运行循环时,Web线程才会解锁。(例如:呼叫 -[UITextView setText:] 然后在主线程上同步读取文件)

        2
  •  0
  •   Alex    12 年前

    不能进行同步XHR,因为这将导致跨域策略错误。