2016-04-12 52 views
11

ローカルの.htmlファイルをWebViewにロードする速度を向上させる方法はありますか? .htmlファイルは、/assetsフォルダに格納されています。Android:WebViewはローカルHTMLの読み込み速度を向上させますファイル

WebViewのテキストがその後示されているがtransistionは、起動する前にレンダリングされる(申し訳ありませんが、リンクが壊れている!)、TextView(赤beackground)ビデオで見ることができるように。 TextViewほど高速にWebViewをロードするにはどうすればよいですか?

//current implementation 
webView.setInitialScale(1); 
webView.getSettings().setJavaScriptEnabled(true); 
webView.getSettings().setLoadWithOverviewMode(true); 
webView.getSettings().setUseWideViewPort(true); 
webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY); 
webView.setScrollbarFadingEnabled(false); 

webView.loadUrl("file:///android_asset/disclaimer.html"); 

概要

それは不可能です。私はここですべてのコメントを試したが、違いはありませんでした。

iOSとAndroidのアプリケーションは、単純にTextViewsImagesで構成されていました。だから我々はローカルhtmlファイルを作成するという考えがありました。これらのファイルは両方のアプリケーションで使用できます。 iOSでは、これは魅力的ですが、Androidではローディング時間を取り除くことができないため、常に空白の画面が表示され、100〜200ms後にコンテンツが表示されます。

アクティビティが表示されている場合、Androids WebViewがレンダリングを開始すると思います。 オンラインモードでは、ユーザーが実際にフォーカスを合わせる前に、ユーザーがバックグラウンドで新しいタップで開く複数のHTMLページを読み込みたくないため、これは完全に意味があります。ただし、オフラインモード(ローカルのhtmlファイルはアプリケーションassetsに格納されています)ではこの動作は必要ありませんが、変更することはできません。

今、私たちは本当になぜphonegap & co sucksなのですか?

レコードの場合: 最後に、コンテンツをプログラムで挿入できる空のLinearLayoutコンテナのアクティビティを使用しました。各スタイル(見出し1、見出し2、コンテンツ...)独自のレイアウトxmlファイルを持っていた

public void insertHeadline(int id){ 

    String text = getString(id); 
    TextView headline = (TextView) inflater.inflate(R.layout.layout_text_headline, null, false); 
    headline.setText(text); 

    //add this TextView to the empty container 
    myLinearLayoutContainerView.addView(headline); 

} 

答えて

3

webviewは、どのくらい多くのスイッチをオン/オフにしても、どれだけ多くの最適化や調整をしても、テキストビューと同じくらい速く赤色に表示されます(何千ものテキスト行をロードするなどのテキストビューを悪用している場合を除きます)。レンダリングの仕組みは、通常のプレゼンテーションに変更を加える方法が限られているため、テキストビューを優先します。なぜなら、CSSはプレゼンテーションに変更を加えることができるからです。これらすべての機能、...

これは、phonegap/cordovaアプリがネイティブアプリと同じくらいうまくやりとりできない理由です。 Webviewのロード/レンダリング時間を改善するには、構成を変更することができますが、コンテンツが定義されるまで待つ方が良い場合があります。これらのすべての設定は、特定の状況下での改善を可能にします。たとえば、レイヤータイプを変更すると、異なるページのレンダリング時間を助けるか、悪化させる可能性があります。 Nirmal氏が答えてくれたように、大きな影響を及ぼしたレイヤー、レイヤー、キャッシュモード、レンダープライオリティのいくつかがあります。

あなたが達成したいことは、ユーザーに不完全な画面が表示されないようにすることです。 onPageFinishedを使用して画面を表示する前にWebビューをレンダリングすることはできますが、速く読み込まれないため、画面が切り替わり、おそらく回転するホイールが必要になるまでユーザーは長く待たなければなりません。

私の経験では、移行を実装した方が優れたユーザーエクスペリエンスであり、ロード時間を最適化する前にHTMLコンテンツを定義するまで待つことになります。

既に気分が悪いと感じている方は、すべてのHTMLコンテンツ/ウェブビューを削除することを検討します。

4

のWebViewは常に長いネイティブのTextViewよりも、レンダリング時間を持つことになります。私はそれがプラットフォームの本質だと思うかもしれませんが、多分HTMLコンテンツを文字列に読み込み、画面を読み込むことができます(ファイルシステムの操作からwebviewを避けるため)。文字列を次のように設定します。

webview.loadDataWithBaseURL("", earlyReadedHtmlString, "text/html", "UTF-8", ""); 

理論的には、これはWebビューでは高速で公平でなければなりません。別の方法は、onPageFinished()を待ってからtextviewを表示することです。回避策になる可能性があります。

5

ロードされるWebアプリケーションによって異なります。優先順位(18+ APIから非推奨)をレンダリング高く設定

:以下のアプローチのいくつかを試してみてください

webview.getSettings().setRenderPriority(RenderPriority.HIGH); 

/無効にハードウェアアクセラレーションを有効にする:

if (Build.VERSION.SDK_INT >= 19) { 
// chromium, enable hardware acceleration 
webView.setLayerType(View.LAYER_TYPE_HARDWARE, null); 
} else { 
    // older android version, disable hardware acceleration 
    webView.setLayerType(View.LAYER_TYPE_SOFTWARE, null); 
} 

は、キャッシュを無効にします。

webview.getSettings().setCacheMode(WebSettings.LOAD_NO_CACHE); 
2

アセットはapkファイルに含まれているため、アクセスが遅くなります。これは本質的に賞賛されるzipファイルです。

私は単に資産からファイルを取り、彼らは非常に大きく、機密データが含まれていない場合は、内部記憶装置(または外部ストレージに書き込むスタートアップルーチンを記述します。

を使用すると、APK年代からそれらを抽出した後

+0

アセットを他の場所にコピーする方法を投稿できますか? – soommy12

関連する問題