Worin besteht der Unterschied, wenn ich ein Android WebView-Objekt mit einem ContextWrapper und einem Context erzeuge?

9

Problem : Ich möchte eine Webseite in einem Android WebView laden und sie an eine Aktivität anhängen, wenn die Aktivität bereit ist. Der Triggerpunkt für das Laden der Webseite ist, bevor die eigentliche Aktivität erstellt wird. So erstelle ich ein Webview-Objekt in einem Dienst folgendermaßen.

%Vor%

Wenn die Aktivität, die diese Webansicht zeigen muss, erstellt wird, erstelle ich einfach ein framelayout und füge eine untergeordnete Ansicht hinzu, d. h. diese webview und rufe setContentView auf. Auf diese Weise erscheint mein Webview mit der vorinstallierten Webseite. Ich mache auch die folgenden

%Vor%

Dies ist das gleiche ContextWrapper-Objekt wie oben angegeben. Auch danach zeichnet das Webview keine JavaScript-Alerts, die es im normalen Anwendungsfall zeichnen kann.

Selbst wenn ich das tue

%Vor%

Das WebView kann JS-Warnungen nicht anzeigen. Ich sehe keine Ausnahmen oder tödliche Tags in den Protokollen. WebView kann keine Fenster darüber zeichnen.

Dies funktioniert auf die normale Art und Weise, dh das Erstellen eines WebView direkt mit dem Kontext der aktuellen Aktivität.

%Vor%

Nach allem, was ich weiß, führt ein Ссылка die gleichen Operationen für den Basiskontext durch, den er enthält wie im Konstruktor übergeben.

Mein Anwendungsfall ist so etwas. Ich erstelle ein WebView-Objekt, dem ein Ссылка übergeben wurde. Der MutableContextWrapper enthält den Kontext einiger Aktivitäten, die er halten kann, oder den Anwendungskontext. Wenn die eigentliche Aktivität gestartet wird, die das Webview anzeigen soll, wechsle ich den Kontext innerhalb des MutableContextWrapper und zeige das Webview an, indem ich es in ein Frame-Layout und setContentView setze. Grundsätzlich ist der Auslöser, um die Seite zu laden, bevor die Aktivität erstellt wird und daher möchte ich die Seite in der Webansicht laden und sie einfach an die Aktivität anhängen, wenn sie erstellt wird.

    
Ravi Ranjan 08.03.2013, 12:10
quelle

1 Antwort

1

Es sieht so aus, als ob Sie die Webansicht des Hauptthreads der Benutzeroberfläche erstellen (basierend auf der Verwendung von serviceContext )

Dies ist im Allgemeinen keine gute Idee, da die Webansicht erwartet, dass der interne Handler an den Hauptthread der Benutzeroberfläche gebunden ist.

Es gibt andere Threads, die sich darauf beziehen:

Ein WebView in einem Thread kann nicht erstellt werden

Es ist viel besser, die Webansicht nach dem Laden der Aktivität zu laden (d. h. in der onCreate -Methode) und einfach einen "Lade" -Indikator für den Benutzer anzuzeigen. Sie können die Webansicht ausblenden (mit setVisibility ), bis sie die Seite geladen hat, und einen WebViewClient auf das Ladeereignis zu hören.

Sobald die Seite geladen wurde, setzen Sie die Sichtbarkeit in Ihrem Webview auf VISIBLE

    
Jason Polites 11.03.2013 21:40
quelle

Tags und Links