android在应用中加载网页需要用到webview ,而webview需要加载在activity中显示,即webview要将显示内容绘制到activity上,由于为了避免webview对内存的消耗,一般在应用中需要动态加载,而不能再xml中显示的静态加载。
webView = new MeetingWebView(this);
RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
RelativeLayout.LayoutParams.MATCH_PARENT,
RelativeLayout.LayoutParams.MATCH_PARENT);
rel_webview.addView(webView, params);
可以看到创建webview时候传入的是activity的context,大家知道应用进程不停止的话,对activity的引用会一直保存,所以这个webview的引用会被应用一直保持,不能被gc回收,这样就造成了app的内存泄露,如何解决呢...
因为只要进程不终止,webview的引用会一直保持,所以我们可以将加载webview的activity在一个新的进程中启动,这样在activity ondestroy()时,退出该进程,那么webview的引用也将得到释放,内存也就不会泄露。
而在一个新的进程中启动一个activity,可以参考下面资料:
http://blog.csdn.net/luoshengyang/article/details/6720261
最后在Ondestroy方法中显示的调用:
protected void onDestroy() {
super.onDestroy();
if (webView != null) {
webView.removeAllViews();
webView.destroy();
}
System.exit(0);
}
参考:http://my.oschina.net/zhibuji/blog/100580