WebVuew性能优化之内存泄漏

       WebView的内存泄漏处理方式有两种,分别是开启独立的web进程、不在xml里面声明,而是直接代码new个对象,传入application context防止activity引用滥用,并反射回收

第一、开启独立的web进程

      1.1 在manifest配置如下:

      <activity
            android:name="com.example.demo.WebActivity"
            android:process=":remote" >

        </activity>

     1.2 在关闭Activity时销毁进程

     protected void onDestroy() {

super.onDestroy();

                //setConfigCallback(null);

System.exit(0);

}

     1.3 缺点:这种方式涉及到进程间的通信,不方便处理,可以通过AIDL解决

第二、不在xml里面声明,而是直接代码new个对象

protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		WindowManager windowManager = (WindowManager) getApplicationContext()
				.getSystemService(Context.WINDOW_SERVICE);
		setConfigCallback(windowManager);
		LinearLayout linearLayout = new LinearLayout(getApplicationContext());
		LinearLayout.LayoutParams layoutParams = new LinearLayout.LayoutParams(
				LinearLayout.LayoutParams.WRAP_CONTENT,
				LinearLayout.LayoutParams.WRAP_CONTENT);
		linearLayout.setLayoutParams(layoutParams);
		WebView webView = new WebView(getApplicationContext());
		WebSettings settings = webView.getSettings();
		settings.setJavaScriptEnabled(true);
		webView.loadUrl("https://www.baidu.com/");
		linearLayout.addView(webView);
		setContentView(linearLayout);
	}

/**
	 * 通过反射来释放内存
	 * 
	 * @param windowManager
	 */
	public void setConfigCallback(WindowManager windowManager) {
		try {
			Field field = WebView.class.getDeclaredField("mWebViewCore");
			field = field.getType().getDeclaredField("mBrowserFrame");
			field = field.getType().getDeclaredField("sConfigCallback");
			field.setAccessible(true);
			Object configCallback = field.get(null);
			if (null == configCallback) {
				return;
			}
			field = field.getType().getDeclaredField("mWindowManager");
			field.setAccessible(true);
			field.set(configCallback, windowManager);
		} catch (Exception e) {
		}
	}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值