WebSetting の隠されたメソッドを呼ぶ

一般的に、HTMLラジオボタンinput type="radio" のデフォルト選択済みは、
先頭に書いた input タグに、checked="checked" を記述するが、
以下のように慣習を無視した記述の場合

  <input type="radio" name="length" id="a" value="10" /><label for="a">A</label>
  <input type="radio" name="length" id="b" value="24" checked="checked" /><label for="b">B</label>
  <input type="radio" name="length" id="c" value="36" /><label for="c">C</label>


Android 2.3 または 3.2WebView では、この場合、Cを選択してフォーム送信後、履歴で戻った時、
選択=Cは、保持されているが、
を選択してフォーム送信後、履歴で戻るとどれも選択されない状態になってしまう。
→ checked="checked" の前に記述された同じグループの ラジオボタンを選択しても履歴で戻ると
  消えてしまう。


Android 4.0 の WebView
ではこのようなことは発生せず、上の場合のAを選択しても戻ってくると
きちんとAが選択済みになっている。
Android 2.3.3 の標準ブラウザも、4.0 のWebView同様、 checked="checked" の前を選択後、戻ってくると
きちんと選択済みになる。

Android 3.2 の WebView で、checked="checked" の前を選択すると、webkit がログに value=null と出力してる。
webkit にバグが存在して、Android 4.0 WebView でバグが働かないようにしたのだろうか?

どうやら、WebSetting には、http://developer.android.com/reference/ に書かれていない
隠された?メソッドが存在していて

http://www.androidjavadoc.com/2.3/android/webkit/WebSettings.html#setPageCacheCapacity(int)
(↑いつまで閲覧できるか不明)

ここの説明にこう書かれている。。。

Set the number of pages cached by the WebKit for the history navigation.
Parameters:
size - A non-negative integer between 0 (no cache) and 20 (max).

これを呼ぶようにしたら、上記の問題が解決した。但し、通常の Android Ecllipseの構成では
この隠されたメソッドの呼び出しは、コンパイルエラーになるのでリフレクションを使う。

Android 4.0 でこの問題は起きないので以下のように書く。

WebView webview = (WebView)findViewById(R.id.webview);

WebSettings webSettings = webview.getSettings();

if (android.os.Build.VERSION.SDK_INT < 14){
   try{
      Method methodSetWorkersEnabled =
      WebSettings.class.getDeclaredMethod("setWorkersEnabled",new Class<?>{boolean.class});
      methodSetWorkersEnabled.invoke(webSettings,true);

      Method methodSetPageCacheCapacity =
      WebSettings.class.getDeclaredMethod("setPageCacheCapacity",new Class<?>

int.class});
      methodSetPageCacheCapacity.invoke(webSettings,5);
   }catch(Exception e){
   }
}

ついでに、setWorkersEnabled 呼んだのは、

http://www.androidjavadoc.com/2.3/android/webkit/WebSettings.html#setWorkersEnabled(boolean)

ここに、
  Note that this flag only affects V8. JSC does not have an equivalent setting.
と、書かれてるので呼ぶことにした。