In meiner einfachen Android-App lade ich programmgesteuert eine Webseite in das WebView. Es beginnt zunächst mit einer Standardwebseite, und die nächste wird basierend auf den Benutzereingaben für die erste Seite geladen. Das JavaScript gibt Informationen über eine Nachricht an die Android-Seite zurück. Alles funktioniert gut, außer wenn die zweite Webseite nicht geladen wird, egal was ich mache und welche URL ich gebe. Wenn ich den zweiten Test lade, erscheint eine Warnung: "Alle WebView-Methoden müssen im selben Thread aufgerufen werden." Aber meines Wissens benutze ich kein Multithreading, noch brauche ich Multithreading.
Hier ist der relevante Code:
%Vor%Hier sind die relevanten Protokollzeilen:
%Vor%Jede Hilfe wird geschätzt. Danke.
Wie bereits von ProfessorT erwähnt, gibt es viele Threads, die hinter den Kulissen mit dem WebView laufen, und Callbacks von JavaScript über JavaScript-Interface-Objekte werden in einem Hintergrund-Thread gemacht.
Sie können erreichen, was Sie mögen mit Code wie diesem in loadNextTest
:
Bitte beachten Sie auch, dass Ihre state
-Variable auch in den JavaScript-Hintergrund-Thread geschrieben wird, so dass viele Ihre Lese- / Schreibvorgänge synchronisieren müssen, wenn sie auch von anderen Threads kommen.
Das Objekt, das an Ihr JavaScript gebunden ist, wird in einem anderen Thread und nicht in dem Thread ausgeführt, in dem es erstellt wurde.
Sie können erzwingen, dass Ihr Webview-URL-Ladevorgang im Hauptthread ausgeführt wird, überprüfen Sie dies:
ausführenTags und Links javascript java android webview android-webview