AndroidってJavaだからメモリ管理なんてしなくてもいいよね!!
なんて思っていた時代が私にもありました・・・
■現実
@Override protected void onDestroy() { super.onDestroy(); // 画面が回転した時など、Activityが破棄されるときに呼び出されます // すべてのメモリはここで開放します // - 特に危険なのが内部クラス(MyWebChromeClientなど)、正しく開放しないとActivityが開放されません // - セットしたbackgroundのcallbackもnullにしないと開放が行われません // - webViewのdestroy()を忘れると後からGCが走ったときにVMがクラッシュします this.webView.stopLoading(); this.webView.setWebChromeClient(null); this.webView.setWebViewClient(null); this.unregisterForContextMenu(this.webView); this.webView.destroy(); this.webView = null; Drawable backgroundDrawable = this.backgroundViewGroup.getBackground(); backgroundDrawable.setCallback(null); this.backgroundViewGroup.setBackgroundDrawable(null); this.backgroundViewGroup = null; this.mainViewGroup = null; this.anotherViewGroup = null; }これだけやらないと平気でクラッシュします。マジです。しかもGCが走るまでクラッシュしないとかそういう厄介すぎる現象に2回ほど遭遇しました。
WeakReferenceとか使えばいいんでしょうけど面倒なんですよねぇ。
■Google曰く
http://d.hatena.ne.jp/nakamura001/20101002/1286015483
iPhoneより普通に厳しい気がするのは気のせいでしょうか
■結論
AndroidはJavaではないのできちんとメモリ管理をしましょう!