2011-01-06 16 views
2

開発者として、Android用のwebviewclientを3G接続で実行するアプリケーション(Webページ付き)を構築する場合、かなり悪い経験をしています。私のユーザーの中には、読み込みに10分かかるものがあると言う人がいます。 (私は彼らが欲求不満のために誇張しているかどうか分かりません)個人的には、私はAndroid 2.2を実行しているHTC Desireを使用し、自分の携帯電話で自分のアプリをテストしました。実際、ローカルに保存されたWebページを使用してAJAXリクエストを作成するアプリケーションであっても、3Gでは非常に遅いです。ほとんどの場合、タイムアウトして空白のページが表示されます。それがWIFI上にあるとき、それはうまく動作し、本当に速いです。Android - WebViewClientがページを非常にゆっくり読み込みます

多くの人がAn​​droid 2.2のネイティブブラウザが非常に速いと聞いてきました。私にとっては、しかし、私はネイティブブラウザのアプリも3Gで非常に遅いと言う必要があります。場合によっては、Googleモバイルのホームページで読み込みが完了しないこともあります。私はシンガポールにいるので、ほとんどの場所で3Gのカバレッジがうまくいくはずです。

問題の原因となっているデバイスハードウェアはありますか?

答えて

0

WebViewの読み込み時間に特に関連するデバイス固有のパフォーマンスの問題は認識していません。ただし、要求のタイムアウトとネットワーク接続の変更リスナの両方を追加することができます。追加情報については、遅い要求でデバイスと接続情報を要求して報告することができます。

handler = new Handler(); 
WebView webView = findViewById(R.id.webview); 
webView.setWebViewClient(new WebViewClient() { 
    final long WEBVIEW_REQUEST_TIMEOUT = ...; 
    final long WEBVIEW_SLOW_REQUEST_THRESHOLD = ...; 
    Runnable onRequestTimeout = null; 
    @Override 
    public void onPageStarted(WebView view, final String url, Bitmap favicon) { 
     super.onPageStarted(view, url, favicon); // current impl is no op but be fwd compatible 
     saveRequestStartTime(); 
     onRequestTimeout = new Runnable() { 
      @Override 
      public void run() { 
       handleRequestComplete(url, WebViewClient.ERROR_TIMEOUT); 
      } 
     }; 
     handler.postDelayed(onRequestTimeout, WEBVIEW_REQUEST_TIMEOUT); 
    } 

    @Override 
    public void onPageFinished(WebView view, String url) { 
     super.onPageFinished(view, url); // current impl is no op but be fwd compatible 
     handleRequestComplete(url, 0); // Return 0 onSuccess. All WebViewClient defined errors < 0. 
    } 

    @Override 
    public void onReceivedError(WebView view, int errorCode, String description, String failingUrl) { 
     super.onReceivedError(view, errorCode, description, failingUrl); // current impl is no op but be fwd compatible 
     handleRequestComplete(failingUrl, errorCode); 
    } 

    private void handleRequestComplete(String url, int errorCode) { 
     if (onRequestTimeout != null) { 
      handler.removeCallbacks(onRequestTimeout); 
     } 
     onRequestTimeout = null; 
     final long elapsedTime = getRequestElapsedTime(); 
     if (elapsedTime > WEBVIEW_SLOW_REQUEST_THRESHOLD) { 
      reportSlowRequest(elapsedTime, url, errorCode); 
     } 
     clearRequestTime(); 
    } 

    private void saveRequestStartTime() {...} 
    private long getRequestElapsedTime() {...} 
    private void clearRequestTime() {...} 
    private void reportSlowRequest(long elapsedTime, String url, int errorCode) {...} 
}); 
関連する問題