6

Я недавно заметил, что в моем приложении есть случайная LAG. и LAG я имею в виду, что может занять до 40 секунд, зависит, если я использую Wi-Fi или мобильные данные ...Журнал <GATE-M> DEV_ACTION_COMPLETED</GATE-M>, похоже, задерживает выполнение на Android

я загружаю URL страницы, а затем загрузить JS для исполнения:

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"); 

После вызова URL-адрес загрузки, страница отображается в веб-просмотра, интерфейс реагирует, я могу нажать на кнопки, вернитесь и перейдите приложение ...

НО

сценарий я пытаюсь запуск не выполняется, только до DEV_ACTION_COMPLETED печатается в журнале, затем все возвращается в нормальное состояние, и onPageFinished вызывается и запускает скрипт мгновенно. проблема в том, что это может занять до 40 секунд.

== UPDATE ==

кажется, что задержка растет в какой-то момент, и после того, что задержка укоротить до нуля и снова возрастает ... его как последовательность: 0,1, 2,4,8,16,32 ... и затем начинается с 0.

Может быть, потому, что я создаю новые действия с веб-просмотром за слишком короткое время?

Любые мысли?

+0

Попробуйте добавить 'webView.setW ebChromeClient (новый WebChromeClient()); webView.setWebViewClient (новый WebViewClient()); 'before' webSettings.setJavaScriptEnabled (true);'. Также посмотрите на это: http://stackoverflow.com/questions/5820237/android-webview-loadurl-with-javascript-onpagefinished-lag – Slartibartfast

+0

Поймет ему пару часов ... – TacB0sS

+0

Не работает .. . :( – TacB0sS

ответ

5

Нам удалось эскиз до решения этого вопроса дерьмовый ... независимо от того, что я пытался, я не мог найти решение Java к этому вопросу, но мы не нашли HTML + JavaScript решение:

Вместо того, чтобы ждать onPageFinish на Java, мы вводим в Java Script, чтобы слушать событие window.onload ...

и там мы вводим наш фактический JavaScript ... работает как шарм ...

For more details.

+2

Ваше решение работает хорошо, и я + 1 сделал ваше решение. Но я был бы более счастливым кемпером, если бы мог выяснить основную причину проблемы, поскольку это происходит на выбранном URL-адресе. Например, с URL-адресом Google .com, onPageFinished всегда срабатывает немедленно. С другим URL-адресом, таким как auth url linkedIn, onPageFinished не запускается при первом загрузке после очистки кэша приложения через настройки. И, наблюдая за переопределением методов webviewclient и web chromeclient, нет перенаправления или ошибки, происходящие на этой странице. – mainframe

+0

Я думаю, что это связано с загрузкой контента ... если вы построите простое приложение для веб-просмотра и распечатаете все обратные вызовы, вы заметите, что также должно должно бытьOverride ... url() m ethod не вызывается для каждой загрузки, это зависит, если запрос получает или публикует, зависит от того, являются ли эти вызовы AJAX, я обнаружил, что для этого есть много причин, а также что ChromeClient сообщает то же, что и WebViewClient. – TacB0sS