2013-08-07 18 views
5

Quando la pagina con WebView viene caricata per la prima volta, a volte le immagini mancano o vengono visualizzate in modo errato. Se ricarico la pagina, WebView viene sempre visualizzato perfettamente. So che tutti penseranno che ho impostato javascript dopo loadUrl, ma non è vero.WebView deve essere caricato due volte per caricare correttamente

In onCreate ho:

learnWebView = (WebView)findViewById(R.id.learnWebView); 
learnWebView.setWebViewClient(new WebViewClient()); 
learnWebView.getSettings().setJavaScriptEnabled(true); 

Poi più tardi nella funzione chiamata dopo onCreate ho:

learnWebView.loadUrl("myurl"); 

E sì, lo so che la funzione con loadURL viene chiamato dopo onCreate ogni volta .

+1

È specifico per un URL o per una versione Android o un dispositivo particolare? Potrebbe essere che WebView stia tentando di caricare contenuto nella cache e fallisce o qualcosa del genere. Ciò accade sui browser WebKit desktop a volte. Hai provato a utilizzare una nuova cache al primo caricamento? –

+0

In realtà sembra essere specifico per Android 4.0. Non succede su 2.3 o 4.1. Usando una nuova cache intendi chiamare learnWebView.clearCache (true)? –

+1

Chiamare clearCache() ha effettivamente peggiorato la situazione. Ha fatto in modo che una ricarica non risolvesse il problema. –

risposta

9

Si prega di provare questo invece di tua strada, che è una cattiva pratica:

 learnWebView.post(new Runnable() { 

      @Override 
      public void run() { 
       learnWebView.loadUrl("myurl"); 
      } 
     }); 

O questo, nel caso in cui la prima non funzionerà:

 learnWebView.postDelayed(new Runnable() { 

      @Override 
      public void run() { 
       learnWebView.loadUrl("myurl"); 
      } 
     }, 500); 

Spero che questo aiuti.

+0

Grazie amico, ci provo domani. –

+0

Quali sono le insidie ​​dell'hack che ho implementato rispetto al tuo suggerimento? Intendo da un punto di vista pratico cosa potrebbe andare storto nel modo in cui non potrei sbagliare in questo modo? Mi accerterò di accettare quando verificherò il corretto funzionamento di domani. –

+0

Sai, a modo tuo, lasci che il thread principale dorme letteralmente per 1s e ricarichi di nuovo (due volte), in questo modo lasci che la webview esegua il lavoro subito (metodo 'post()' o nel peggiore dei casi solo ritardo per pochi millisecondi (metodo 'postDelayed()' (solo una volta). Nel caso abbiate bisogno di una spiegazione. Saluti! – user2652394

1

Vedere onViewAttachedToWindow. È necessario elaborare la logica in javascript solo dopo l'attivazione di onViewAttachedToWindow.

0

Ho incontrato lo stesso problema. non sono sicuro se è lo stesso caso del tuo. Ho trascorso più di 3 giorni e in realtà ho trovato la causa per cui un altro oggetto WebView chiama pauseTimers() per il salvataggio di alcune prestazioni della CPU che in realtà "mette in pausa tutti i layout, l'analisi e i timer JavaScript per tutte le Webviews".

Problemi correlati