6

Ich habe kürzlich festgestellt, dass meine App gelegentlich LAG hat. und von LAG ich es bedeuten kann bis zu 40 Sekunden dauern, hängt ab, wenn ich WiFi oder mobile Daten verwenden ...Log <GATE-M> DEV_ACTION_COMPLETED</GATE-M> scheint die Ausführung auf Android zu verzögern

laden ich eine Seite URL, und laden js dann zur Ausführung:

webView = (WebView) view.findViewById(R.id.WebView); 

    webView.setWebViewClient(new WebViewClient() { 

     @Override 
     public void onPageStarted(WebView view, String url, Bitmap favicon) { 
      logDebug("Loading URL: " + url); 
      super.onPageStarted(view, url, favicon); 
     } 

     @Override 
     public boolean shouldOverrideUrlLoading(WebView view, String url) { 
      return WrappingClass.this.shouldOverrideUrlLoading(view, url); 
     } 

     @Override 
     public void onPageFinished(WebView view, String url) { 
      super.onPageFinished(view, url); 
     logInfo("loading JavaScript to webview."); 
     webView.loadUrl("full-js-here"); 

     } 

     @Override 
     public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
      logError("error code:" + errorCode); 
      super.onReceivedError(view, errorCode, description, failingUrl); 
     } 
    }); 

    WebSettings webSettings = webView.getSettings(); 
    webSettings.setSavePassword(false); 
    webSettings.setSaveFormData(false); 
    webSettings.setJavaScriptEnabled(true); 
    webView.requestFocus(View.FOCUS_DOWN); 
    webView.loadUrl("url"); 

Nach dem Aufruf die Last-uRL, die Seite in der Web-Ansicht angezeigt wird, ist die Benutzeroberfläche reagiert, ich auf Schaltflächen klicken können, gehen Sie zurück, und navigieren Sie die Anwendung ...

ABER

das Skript ich versuche, run wird nicht ausgeführt, nicht bis DEV_ACTION_COMPLETED wird in das Protokoll gedruckt, dann wird wieder alles normal, und onPageFinished wird aufgerufen und das Skript wird sofort ausgeführt. Problem kann dies bis zu 40 Sekunden dauern.

== == UPDATE

Es scheint, dass die Verzögerung bis zu einem gewissen Punkt wächst, und dass, nachdem die Verzögerung ist zu nichts verkürzen und wächst wieder ... es ist wie eine Sequenz: 0,1, 2,4,8,16,32 ... und dann beginnt von 0.

Könnte es sein, weil ich neue Aktivitäten mit Webview erstellen, in einer zu kurzen Zeit?

Irgendwelche Gedanken?

+0

Versuchen Sie, 'webView.setW hinzuzufügen ebChromeClient (neuer WebChromeClient()); webView.setWebViewClient (neuer WebViewClient()); 'vor' webSettings.setJavaScriptEnabled (true); '. Siehe auch: http://stackoverflow.com/questions/5820237/android-webview-loadurl-with-javascript-onpagefinished-lag – Slartibartfast

+0

Wird es in ein paar Stunden gehen ... – TacB0sS

+0

Hat nicht funktioniert .. . :( – TacB0sS

Antwort

5

Wir haben es geschafft, eine Lösung für dieses beschissene Frage zu skizzieren up ... egal was ich versucht habe ich keine Java Lösung für dieses Problem finden konnten, aber wir haben eine HTML + JavaScript-Lösung zu finden:

Statt für die onPageFinish des Java warten, spritzen wir ein Java-Script, um das window.onload Ereignis ...

zu hören und es uns unsere tatsächliche JavaScript spritzen ... wirkt wie ein Zauber ...

For more details.

+2

Ihre Lösung funktioniert gut und ich + 1'ed Ihre Lösung. Aber ich wäre ein glücklicherer Camper, wenn ich die Ursache des Problems herausfinden könnte, da es auf ausgewählte URL passiert. Zum Beispiel mit der URL als Google .com, onPageFinished wird immer sofort ausgelöst.Wenn eine andere URL wie die URL von linkedIn verwendet wird, wird onPageFinished nicht beim ersten Laden ausgelöst, nachdem die Cache-Einstellungen der App gelöscht wurden.Wenn die Methoden von webviewclient und web chromeclient überschrieben werden, gibt es keine Weiterleitungen oder Fehler auf dieser Seite – mainframe

+0

Ich denke, es hat etwas mit dem Laden von Inhalten zu tun ... Wenn Sie eine einfache Webview-App erstellen und alle Callbacks ausdrucken würden, würden Sie bemerken, dass auch ifoverride ... url() m ethod wird nicht für jeden Ladevorgang aufgerufen, es hängt davon ab, ob die Anfrage get oder post ist, es hängt davon ab, ob es sich um AJAX-Aufrufe handelt, ich habe festgestellt, dass es viele Gründe dafür gibt, und dass der ChromeClient genauso berichtet wie der WebViewClient. – TacB0sS