WebView.setBlockNetworkImageで画像ロードを抑制すると、リンク遷移が遅くなることがある。

113 views
Skip to first unread message

Yasuhiro Inagawa

unread,
Aug 18, 2016, 1:39:26 PM8/18/16
to Android-SDK-Japan
お世話になります。

WebViewアプリを作っているのですが、状況に応じて画像は不要なことがあるため、ロードの高速化なども考慮して、
setBlockNetworkImage()で画像ロードを動的に抑制しています。
このAPI自体は意図通り動作しており、効果も出ているのですが、タイトルの通り、画像ロードをブロックしているときに限って
リンクの遷移が遅くなる(タップして5秒くらい黙り込んでしまう)ことがあるようです。

再現手順:
WebViewだけを置いたプロジェクトを作ります。以下が最小コードです。
---ここから
public class MainActivity extends AppCompatActivity {
private static final String TAG="MainActivity";
private WebView mWebView;
private WebSettings mWebSettings;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

mWebView = (WebView)findViewById(R.id.webView);
mWebSettings = mWebView.getSettings();
mWebSettings.setJavaScriptEnabled(true);
mWebSettings.setBlockNetworkImage(true);
mWebView.setWebViewClient(new WebViewClient(){
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return false;
}
});

mWebView.loadUrl( "http://www.yahoo.co.jp");
}
}
---ここまで
実行するとYahooをロードするので、Yahooオークションのリンクをタップすると、ボタンとしては応答するのですが、
数秒黙り込んでから、ヤフオクのページに遷移します。setBlockNetworkImage(false)にすると、遷移はすぐに始まります。


API22のemulatorとAPI23の実機で数回試して、再現性を確認しました。
コンテンツを見ると、ただのaタグなのですが、今のところYahoo以外では発生を確認していません。
また、アプリ側からWebView.loadUrl()を実行したときには、問題は発生しないようです。

最初発生条件がまったくわからず、やっとここまで切り分けたのですが、リンクのタップと画像ロードが本当に関係があるのか
ないのか全くわかりません。
似た状況をご存じの方、解決方法をご存じの方いらっしゃいましたら、情報をいただけないでしょうか。

よろしくお願いいたします。

Reply all
Reply to author
Forward
0 new messages