Android アプリで WebView を使用していますが、WebView がキャッシュされないようにする必要があります。
残念ながら、この一見単純な目標を達成するのはほとんど不可能に思えます。私が使用した解決策は、onPageFinished イベントで webview.clearCache(true) を実行して、ページが読み込まれるたびにキャッシュがクリアされるようにすることです。いくつか問題があります...
キャッシュが大きくなるにつれて、clearCache メソッドの実行に非常に時間がかかることに気付きました。clearCache を実行してから、別の Web ビューを含む別のアクティビティに切り替えると、前の clearCache 操作の完了をまだ待っているため、その Web ビューが数秒間読み込まれないことがあります。
さらに悪いことに、キャッシュが既にクリアされた後、その後の clearCache の呼び出しの実行時間は減少していないようです。clearCache の呼び出しが完了するまでに 3 秒かかり、すぐにもう一度 clearCache を呼び出した場合、clearCache の 2 回目の呼び出しはほとんどすぐに完了すると予想されます。しかし、それは私が経験していることではありません。clearCache への 2 回目の呼び出しには、まだ約 3 秒かかります。
他の誰かがこれを経験しましたか?パフォーマンスを向上させる方法はありますか? WebView が (ローカル ファイルシステムから) 読み込まれるまで 2 ~ 3 秒待つのは恐ろしいことです。
編集:
これが、実際にキャッシュをクリアするための最良の代替手段です。多かれ少なかれ機能しますが、不安定で、100% 満足しているわけではありません (Mono c# で記述):
public class NoCacheWebClient : WebViewClient
{
string previous;
public override void OnPageStarted(WebView view, string url, Android.Graphics.Bitmap favicon)
{
base.OnPageStarted(view, url, favicon);
if (!string.Equals(previous, url))
{
previous = url;
view.Reload(); //re-load once to ignore cache
}
else
{
previous = null;
}
}
}