文档章节

WebView内存泄露的解决方案

 北辰丨丶
发布于 03/06 14:15
字数 844
阅读 50
收藏 1

一、简介:

做Android开发的相信都对webview不会陌生,而且也对系统自带的webview本身存在的问题也是怨念很久了,一方面是本身对js的支持不是很好另外一方面就是经常被人诟病的内存泄露了,网上也有很多解析和方案但至少在我的项目中是没任何效果的,今天我就分享一下我最终是怎么解决这些问题的(其实是很蠢的一个办法)。

二、需求背景:

需要一个带有加载进度条的webview来正常的显示合作方和自己的web页面。
1、解决webview对一些js的支持:
2、解决webview内存泄露:

关于内存泄漏终于找到了终极解决办法!!!该办法适用于我们的需求,在退出WebView的界面之后,迅速回收内存。也就是说为加载WebView的界面开启新进程,在该页面退出之后关闭这个进程。

这一点说了之后,你懂了吧?
但是在这个其中,杀死自己进程的时候又遇到了问题,网上介绍的各种方法都不好使,
killBackgroundProcesses(getPackageName());各种不好用,最后使用System.exit(0);直接退出虚拟机(Android为每一个进程创建一个虚拟机的)。这个肯定不用纠结了,一旦退出,内存里面释放。听说QQ也是这么做。

在WebView所在的activity中,杀死WebView所在的进程(单独为WebView所在的activity开一个进程,注意,一个应用可以有多个进程

@Override
    public void onDestroy() {
        android.os.Process.killProcess(android.os.Process.myPid());
        super.onDestroy();
    }

清单文件

<application
        android:allowBackup="true"
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name"
        android:process="com.processkill.p1" // can be given any name 
        android:theme="@style/AppTheme" >
        <activity
            android:name="com.processkill.A"
            android:process="com.processkill.p2"
            android:label="@string/app_name" >
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>

    <---你的WebView所在的activity->
        <activity
            android:name="com.processkill.B"
            android:process="com.processkill.p3" //为WebView所在的activity单独开一个进程
            android:label="@string/app_name" >
        </activity>
    </application>

最后给大家分享一份非常系统和全面的Android进阶技术大纲及进阶资料,及面试题集

想学习更多Android知识,请加入Android技术开发企鹅交流 7520 16839

进群与大牛们一起讨论,还可获取Android高级架构资料、源码、笔记、视频

包括 高级UI、Gradle、RxJava、小程序、Hybrid、移动架构、React Native、性能优化等全面的Android高级实践技术讲解性能优化架构思维导图,和BATJ面试题及答案!

群里免费分享给有需要的朋友,希望能够帮助一些在这个行业发展迷茫的,或者想系统深入提升以及困于瓶颈的朋友,在网上博客论坛等地方少花些时间找资料,把有限的时间,真正花在学习上,所以我在这免费分享一些架构资料及给大家。希望在这些资料中都有你需要的内容。

© 著作权归作者所有

粉丝 1
博文 47
码字总数 145411
作品 0
东城
私信 提问
Android 内存泄露的几中场景

title: Android 内存泄露的几中场景 date: 2016-11-22 13:57 tags: Android Android 内存泄漏 java 存在一个垃圾回收机制,发生泄漏的原因就是应该被回收的垃圾没有被回收,这种情况就叫做内...

WooiiiWooiii
2016/12/21
0
0
android常见bug及解决方案总结

空指针 解决方案 不确定对象在使用前先做是否为空判断 特别注意:fragment getActivity为null处理 数组越界 解决方案 使用索引值获取对象值时,需判断索引值是否小于数据源大小 example: Li...

码无止境
2016/12/09
0
0
WebView深度学习(三)之WebView的内存泄漏、漏洞以及缓存机制

上两篇文章讲到了WebView的基本使用以及Android和js的交互 以及 全面总结WebView遇到的坑及优化 ,这篇文章讲一下内存泄漏和漏洞处理。如果你想更深入的了解WebView,这篇文章值得一看。 ⇒ ...

AWeiLoveAndroid
2018/01/10
0
0
WebView深度学习(三)之WebView的内存泄漏、漏洞以及缓存机制原理和解决方案

上两篇文章讲到了WebView的基本使用以及Android和js的交互 以及 全面总结WebView遇到的坑及优化 ,这篇文章讲一下内存泄漏和漏洞处理。如果你想更深入的了解WebView,这篇文章值得一看。 ⇒ ...

aweiloveandroid
2018/01/10
0
0
你不知道的Android WebView漏洞

前言 现在很多App里都内置了Web网页(Hyprid App),比如说很多电商平台,淘宝、京东、聚划算等等,如下图 京东首页 上述功能是由 Android的WebView 实现的,但是 WebView 使用过程中存在许多...

Carson_Ho
2017/06/24
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Flink Graph生成及Hash生成分析

222

MrPei
4分钟前
1
0
[译]Android Activity 和 Fragment 状态保存与恢复的最佳实践

https://blog.csdn.net/growing_tree/article/details/53759564 https://blog.csdn.net/u013588712/article/details/54691791...

shzwork
5分钟前
1
0
调用第三方快递鸟物流单号查询接口API代码示例

最近进行网站后台开发,需要实现物流的即时查询,发现之前集成的 快递100物流查询 API ——【PHP 快递查询源码资源】 已经不能正常使用了; 为了方便以后的业务需求,经过比较,最后选择使用...

程序的小猿
12分钟前
2
0
java Poi 操作执行excel 文件中函数问题

poi 读取excel 文件,当excel 有函数时,poi直接读取返回的是excel 函数,并不能返回函数计算结果: 解决步骤: sheet.setForceFormulaRecalculation(true); 判断该列格式是否为...

早a
20分钟前
3
0
js模拟实现输入框input事件

直接修改value值是无法触发对应元素的事件的。 通过发送输入框input事件了, 可以触发。 这里简单封装了一个方法. window.inputValue = function (dom, st) { var evt = new InputEvent('i...

開援带碼
21分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部