6

최근에 내 앱에 LAG가 있음을 발견했습니다. 호출 한 후로그 <GATE-M> DEV_ACTION_COMPLETED</GATE-M>은 Android에서 실행이 지연되는 것 같습니다.

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

: 나는 와이파이 또는 모바일 데이터를 사용하는 경우와 내가 40 초까지 걸릴 수 있음을 의미 LAG에 의해,

한 페이지의 URL을로드 한 다음 실행을 위해 JS로드 ... 달려있다 부하 URL이 페이지가 웹보기에 표시되면, UI는 ... 내가 버튼을 클릭 돌아가서, 응용 프로그램을 탐색 할 수

하지만

I가 노력하고있어 스크립트 응답 실행할 때까지 실행되지 않습니다. DEV_ACTION_COMPLETED이 로그에 인쇄되면 모든 것이 정상으로 돌아가고 onPageFinished가 호출되어 즉시 스크립트가 실행됩니다. 문제는 이것이 최대 40 초가 걸릴 수 있습니다.

== 업데이트 ==

지연이 어느 시점에 성장하고 있다는 것, 그리고 그 후 지연이 아무것도 단축하고 그 시퀀스처럼 ... 다시 증가 : 0, 1, 2,4,8,16,32 ... 0 시부 터 시작합니다.

너무 짧은 시간에 webview로 새로운 활동을 만들고 있기 때문에 그럴 수 있습니까?

의견이 있으십니까?

+0

'webView.setW ebChromeClient (새 WebChromeClient()); webSettings.setJavaScriptEnabled (true); 앞에 'webView.setWebViewClient (새 WebViewClient()); 또한 이것 좀 봐 : http://stackoverflow.com/questions/5820237/android-webview-loadurl-with-javascript-onpagefinished-lag – Slartibartfast

+0

두 시간 후에 갈 것입니다 ... – TacB0sS

+0

작동하지 않았습니다 .. . : ( – TacB0sS

답변

5

우리는이 엉터리 문제에 대한 솔루션을 스케치 관리해야 ... 아무리 내가이 문제에 자바 솔루션을 찾을 수 없습니다 시도했지만, 우리는 HTML + 자바 스크립트 솔루션을 찾을 수 무슨 짓을했는지 :

을 대신 자바의 onPageFinish 기다리는

, 우리는 우리가 우리의 실제 자바 스크립트를 삽입이 ... 위해 window.onload 이벤트에

을 듣고 자바 스크립트를 주입하고 ...

매력처럼 작동

For more details.

+2

당신의 솔루션은 잘 작동하고 솔루션을 +1했습니다. 그러나 내가 선택한 URL에서 발생하기 때문에 문제의 근본 원인을 파악할 수 있다면 더 행복 할 것입니다. 예를 들어 google .com, onPageFinished는 항상 즉시 트리거됩니다. linkedIn의 auth url과 같은 다른 URL을 사용하면 설정을 통해 앱의 캐시를 지운 후에 onPageFinished가 첫 번째로드에서 트리거되지 않으며 webviewclient 및 웹 chromeclient의 메소드를 재정의하여 관찰 한 결과 리디렉션이나 그 페이지에서 일어나는 에러. – mainframe

+0

나는 그것이 콘텐츠 로딩과 관련이 있다고 생각한다. 간단한 웹뷰 앱을 만들고 모든 콜백을 출력한다면 shouldOverride ... url() m ethod는 각 로딩에 대해 호출되지 않습니다. 요청이 가져 오거나 게시되는지 여부에 따라 다르며, AJAX 호출인지 여부에 따라 달라집니다. 여러 가지 이유가 있으며 ChromeClient가 WebViewClient와 동일한 내용을보고합니다. – TacB0sS

관련 문제