http://d.hatena.ne.jp/zentoo/20120501/1335848528
↑この記事で、WebView#setJsFlagsが@hideなので、window.gcを使えるようにできないよーって書いてましたが
よく考えたら、@hideだろうがなんだろうがreflectionを使えば問題なく呼べるので、以下の様なコードを書けば
try { Class<WebView> c = (Class<WebView>) webView.getClass(); Method m = c.getDeclaredMethod("setJsFlags", String.class); m.setAccessible(true); m.invoke(webView, "--expose_gc"); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); }
setJsFlags、呼べちゃうんですよね。文句言われずに。
僕の試した所だと、Android2.3.3はダメでしたがAndroid4.0で(どちらもエミュレータ)
window.gc
というfunctionが生えていることをJS Layerから確認できました。callすることも可能なようです。実際にgcが走ってるか、までは調べてませんが。
というわけで、window.gcは頑張ればcallできます。興味のある人はためしてみるとよいかもしれません。
(追記: Android4.1.1とかだとなくなっているっぽい? -> http://tools.oesf.biz/android-4.1.1_r1.0/xref/frameworks/base/core/java/android/webkit/WebView.java)