6

Gần đây tôi đã nhận thấy rằng ứng dụng của tôi có LAG không thường xuyên. và bởi LAG Tôi có nghĩa là nó có thể mất đến 40 giây, phụ thuộc nếu tôi sử dụng Wifi hoặc dữ liệu di động ...Nhật ký <GATE-M> DEV_ACTION_COMPLETED</GATE-M> dường như trì hoãn việc thực thi trên Android

Tôi tải một url trang, và sau đó tải js để thực hiện:

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

Sau khi gọi url tải, trang web được hiển thị trong giao diện web, giao diện người dùng được đáp ứng, tôi có thể nhấp chuột vào nút, quay trở lại, và điều hướng các ứng dụng ...

NHƯNG

các kịch bản tôi đang cố gắng để chạy không được thực hiện, không cho đến khi DEV_ACTION_COMPLETED được in vào nhật ký, sau đó mọi thứ trở lại bình thường và onPageFinished được gọi và chạy tập lệnh ngay lập tức. vấn đề là điều này có thể mất đến 40 giây.

== CẬP NHẬT ==

Dường như sự chậm trễ đang phát triển đối với một số điểm, và sau đó sự trì hoãn là rút ngắn để không có gì và mọc một lần nữa ... nó giống như một chuỗi: 0,1, 2,4,8,16,32 ... và sau đó bắt đầu từ 0.

Có thể vì tôi đang tạo hoạt động mới với chế độ xem web, trong một khoảng thời gian quá ngắn?

Mọi suy nghĩ?

+0

Thử thêm 'webView.setW ebChromeClient (new WebChromeClient()); webView.setWebViewClient (mới WebViewClient()); 'before' webSettings.setJavaScriptEnabled (true); '. Ngoài ra hãy nhìn vào điều này: http://stackoverflow.com/questions/5820237/android-webview-loadurl-with-javascript-onpagefinished-lag – Slartibartfast

+0

Sẽ cung cấp cho nó một đi trong một vài giờ ... – TacB0sS

+0

Đã không hoạt động .. . :( – TacB0sS

Trả lời

5

Chúng tôi đã cố gắng phác họa lên một giải pháp cho vấn đề này crappy ... không có vấn đề gì tôi đã cố gắng tôi không thể tìm thấy một giải pháp Java để vấn đề này, nhưng chúng tôi đã tìm thấy một HTML + JavaScript giải pháp:

Thay vì chờ đợi onPageFinish của java, chúng tôi tiêm một kịch bản java để nghe sự kiện window.onLoad ...

và ở đó chúng tôi tiêm JavaScript thực tế của chúng tôi ... hoạt động như một sự quyến rũ ...

For more details.

+2

Giải pháp của bạn hoạt động tốt và tôi đã +1 giải pháp của bạn.Nhưng tôi sẽ là một người cắm trại vui vẻ hơn nếu tôi có thể tìm ra nguyên nhân gốc rễ của vấn đề vì nó xảy ra trên url chọn.Ví dụ, với url là google .com, onPageFinished luôn kích hoạt ngay lập tức Với một url khác như url auth của linkedIn, onPageFinished không kích hoạt trên lần tải đầu tiên sau khi xóa bộ nhớ cache của ứng dụng thông qua các cài đặt và quan sát việc ghi đè các phương thức webviewclient và chromeclient trên web, không có chuyển hướng hoặc các lỗi xảy ra trên trang đó – mainframe

+0

Tôi nghĩ rằng nó phải làm với tải nội dung ... nếu bạn sẽ xây dựng một ứng dụng webview đơn giản, và in ra tất cả các cuộc gọi lại, bạn sẽ nhận thấy, mà cũng nên ghi đè ... url() m ethod không được gọi cho mỗi lần tải, nó phụ thuộc nếu yêu cầu nhận được hoặc đăng, nó phụ thuộc nếu đây là các cuộc gọi AJAX, tôi đã tìm thấy có nhiều lý do cho điều này, và cũng rằng ChromeClient báo cáo giống như WebViewClient. – TacB0sS

Các vấn đề liên quan