Vermeiden Hauptthread gefriert, wenn UIWebView versucht, blockierend den Web-Thread zu sperren

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

  •  07-07-2019
  •  | 
  •  

Frage

Alle UIWebViews teilen sich eine einzige Web-Thread.

Wenn einer von ihnen init-ed ist, aus Super entfernt usw., werden sie versuchen, den Web-Thread aus dem Hauptthread in einer blockierenden Weise zu verriegeln, wodurch zeitweise die Laufschleife des Haupt-Thread einzufrieren.

Wenn der Web-Thread besetzt ist, z während eines langen synchronen XMLHttpRequest tut, hat dies den Haupt-Thread für eine lange Zeit blockieren kann.

Gibt es eine Möglichkeit, dies zu vermeiden?

Wenn ich UIWebView ändern könnte, würde ich nur die nicht-blockierende Sperre Versuch machen, aber offensichtlich ist das nicht der Fall, so dass ich bin auf der Suche nach anderen cleveren Ideen.

War es hilfreich?

Lösung

Das lange und kurze davon ist: alles vermeiden, was zu tun, dass blockiert der Web-Thread für eine erhebliche Menge an Zeit (window.alert, window.prompt, XMLHttpRequest.open('GET', url, false), möglicherweise andere)

Vermeiden Sie auch Methoden aufrufen, die den Web-Thread und dann sofort etwas zu tun, sperren, die eine lange Zeit wie der Web-Thread nimmt nur entriegelt, sobald die Steuerung an die Laufschleife zurückgeführt wird. (Beispiel: call -[UITextView setText:] dann eine Datei synchron auf dem Haupt-Thread lesen)

Andere Tipps

Sie können nicht synchron xhr machen, da diese Politik Fehler zu domänenübergreif führen wird.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top