2013-08-07 14 views
5

Kiedy strona z WebView ładuje się po raz pierwszy, czasami brakuje obrazów lub są wyświetlane niepoprawnie. Jeśli ponownie załaduję stronę, WebView zawsze wyświetla się idealnie. Wiem, że wszyscy najpierw pomyślą, że ustawiłem javascript po loadUrl, ale to nie jest prawda.WebView musi być załadowany dwa razy, aby załadować poprawnie

W onCreate mam:

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

Później w funkcji o nazwie po onCreate mam:

learnWebView.loadUrl("myurl"); 

I tak, wiem, że funkcja z loadUrl nazywa po onCreate za każdym razem .

+1

Czy dotyczy to adresu URL, wersji Androida lub konkretnego urządzenia? Może się zdarzyć, że WebView próbuje załadować zawartość z pamięci podręcznej i zawiedzie lub coś takiego. Zdarza się to czasami w przeglądarkach na komputery PC. Czy próbowałeś użyć świeżego bufora przy pierwszym ładowaniu? –

+0

Właściwie to wydaje się być specyficzne dla Androida 4.0. Nie występuje w wersji 2.3 lub 4.1. Używając świeżej pamięci podręcznej, masz na myśli wywołanie metody learnWebView.clearCache (true)? –

+1

Wywołanie metody clearCache() faktycznie pogorszyło sytuację. To sprawiło, że ponowne załadowanie nie naprawiłoby problemu. –

Odpowiedz

9

Spróbuj to zamiast swojej drodze, że jest złą praktyką:

 learnWebView.post(new Runnable() { 

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

Albo ten, w przypadku, gdy pierwszy przyzwyczajenie praca:

 learnWebView.postDelayed(new Runnable() { 

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

Nadzieja to pomaga.

+0

Dzięki stary, wypróbuję to jutro. –

+0

Jakie są pułapki hacku, które wdrożyłem w porównaniu z Twoją sugestią? Mam na myśli z praktycznego punktu widzenia, co może pójść nie tak z moją drogą, która nie mogłaby pójść źle w ten sposób? Na pewno się zgodzę, gdy sprawdzę, czy to działa poprawnie jutro. –

+0

Wiesz, na swój sposób zostawiłeś główny wątek spać dosłownie przez 1s i ponownie załadowałeś (dwa razy), w ten sposób po prostu pozwól webview wykonać zadanie od razu (metoda 'post()' lub w najgorszym przypadku po prostu opóźnienie na kilka milisekund (metoda 'postDelayed()') (tylko raz). Jeśli potrzebujesz wyjaśnienia. Twoje zdrowie! – user2652394

1

Spójrz na onViewAttachedToWindow. Powinieneś przetworzyć swoją logikę w javascript dopiero po zwolnieniu onViewAttachedToWindow.

0

Spotkałem ten sam problem. nie jestem pewien, czy jest to ten sam przypadek, co twój. Spędziłem ponad 3 dni i faktycznie znalazłem przyczynę, dla której inny obiekt WebView wywołuje pauseTimers() w celu zapisania wydajności procesora, która faktycznie "zatrzymuje wszystkie układy, parsowanie i zegary JavaScript dla wszystkich WebView."

Powiązane problemy