1、简介:android
作Android开发的相信都对webview不会陌生,并且也对系统自带的webview自己存在的问题也是怨念好久了,一方面是自己对js的支持不是很好另一方面就是常常被人诟病的内存泄露了,网上也有不少解析和方案但至少在个人项目中是没任何效果的,今天我就分享一下我最终是怎么解决这些问题的(实际上是很蠢的一个办法)。web
2、需求背景:面试
须要一个带有加载进度条的webview来正常的显示合做方和本身的web页面。
一、解决webview对一些js的支持:
二、解决webview内存泄露:小程序
关于内存泄漏终于找到了终极解决办法!!!该办法适用于咱们的需求,在退出WebView的界面以后,迅速回收内存。也就是说为加载WebView的界面开启新进程,在该页面退出以后关闭这个进程。性能优化
这一点说了以后,你懂了吧?
可是在这个其中,杀死本身进程的时候又遇到了问题,网上介绍的各类方法都很差使,
killBackgroundProcesses(getPackageName());各类很差用,最后使用System.exit(0);直接退出虚拟机(Android为每个进程建立一个虚拟机的)。这个确定不用纠结了,一旦退出,内存里面释放。据说QQ也是这么作。架构
在WebView所在的activity中,杀死WebView所在的进程(单独为WebView所在的activity开一个进程,注意,一个应用能够有多个进程)app
@Override public void onDestroy() { android.os.Process.killProcess(android.os.Process.myPid()); super.onDestroy(); }
清单文件ide
<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技术开发企鹅交流 7520 16839性能
进群与大牛们一块儿讨论,还可获取Android高级架构资料、源码、笔记、视频学习
包括 高级UI、Gradle、RxJava、小程序、Hybrid、移动架构、React Native、性能优化等全面的Android高级实践技术讲解性能优化架构思惟导图,和BATJ面试题及答案!
群里免费分享给有须要的朋友,但愿可以帮助一些在这个行业发展迷茫的,或者想系统深刻提高以及困于瓶颈的朋友,在网上博客论坛等地方少花些时间找资料,把有限的时间,真正花在学习上,因此我在这免费分享一些架构资料及给你们。但愿在这些资料中都有你须要的内容。