美文网首页
防止WebView内存泄漏解决方法

防止WebView内存泄漏解决方法

作者: baby_honour | 来源:发表于2019-01-23 14:50 被阅读7次
public void destroy() {
    if (mWebView != null) {
        // 如果先调用destroy()方法,
        //则会命中if (isDestroyed()) return;需要先onDetachedFromWindow()
        //再 destory()
        ViewParent parent = mWebView.getParent();
        if (parent != null) {
            ((ViewGroup) parent).removeView(mWebView);
        }
 
        mWebView.stopLoading();
        // 退出时调用此方法,移除绑定的服务,否则某些特定系统会报错
        mWebView.getSettings().setJavaScriptEnabled(false);
        mWebView.clearHistory();
        mWebView.clearView();
        mWebView.removeAllViews();
 
        try {
            mWebView.destroy();
        } catch (Throwable ex) {
 
        }
    }
}
/**
 * 解决支付宝的 com.alipay.sdk.app.H5PayActivity 类引起的内存泄漏。
 *
 * <p>
 *     说明:<br>
 *         这个方法是通过监听H5PayActivity生命周期,获得实例后,通过反射将webview拿出来,从
 *         它的parent中移除。如果后续支付宝SDK官方修复了该问题,则我们不需要再做什么了,不管怎么
 *         说,这个方案都是非常恶心的解决方案,非常不推荐。同时,如果更新了支付宝SDK后,那么内部被混淆
 *         的字段名可能更改,所以该方案也无效了。
 * </p>
 *
 * @param activity
 */
public static void resolveMemoryLeak(Activity activity) {
    if (activity == null) {
        return;
    }
 
    String className = activity.getClass().getCanonicalName();
    if (TextUtils.equals(className, "com.alipay.sdk.app.H5PayActivity")) {
        Object object = Reflect.on(activity).get("a");
 
        if (DEBUG) {
            LogUtils.e(TAG, "AlipayMemoryLeak.resolveMemoryLeak activity = " + className
                + ",  field = " + object);
        }
 
        if (object instanceof WebView) {
            WebView webView = (WebView) object;
            ViewParent parent = webView.getParent();
            if (parent instanceof ViewGroup) {
                ((ViewGroup) parent).removeView(webView);
            }
        }
    }
}

相关文章

  • Android webview使用

    webview的创建 为了防止webview内存泄漏,目前对webview内存的管理有两种模式 webview单独...

  • 防止WebView内存泄漏解决方法

  • 防止WebView内存泄漏

    生成WebView new一个而不是在.xml中定义webview节点 销毁 WebView 在 Activity...

  • Android常见问题集锦

    1、调用webview的页面应及时销毁,防止内存泄漏(具体如下): 2、scrollView设置android:f...

  • Android如何避免WebView内存泄漏

    Android如何避免WebView内存泄漏 什么是内存泄漏 内存泄漏通俗的讲就是你创建了一个对象,却没有在合适的...

  • Android 内存泄漏

    内存泄漏的原因 常见的内存泄漏与解决方法 检测内存泄漏 认识内存泄漏 根本原因就是当一个对象理应被回收的时候,因为...

  • WebView内存泄漏--解决方法小结

    有些东西还是记下来比较好,记记随笔,欢迎批评建议。 前段时间在项目中就用到webview展示大量的新闻资讯页面,然...

  • WebView内存泄漏--解决方法小结

    有些东西还是记下来比较好,记记随笔,欢迎批评建议。 前段时间在项目中就用到webview展示大量的新闻资讯页面,然...

  • java基础

    Handler怎样防止内存泄漏 handler引起内存泄漏的原因:由于handler的写法问题,如果handler...

  • 内存泄漏--webview

    In Android app development, webview is widely used. Howev...

网友评论

      本文标题:防止WebView内存泄漏解决方法

      本文链接:https://www.haomeiwen.com/subject/ovgjjqtx.html