Webview性能优化-小结

简介: Webview性能优化-小结

Webview性能优化-小结

1、Webview预加载


App启动就初始化一次WebView。副作用是WebView的初始化必须位于主线程,但主线程会阻塞其他业务代码导致ANR

public class App extends Application {
    @Override
    public void onCreate() {
        ...
        WebView webView = new WebView(this);  // 无脑初始化一次Webview
        webView.destroy();
        webView = null;
    }
}

2、WebView池


在首次后台创建WebView后并不销毁,而是存入备用池,当用户需要时直接取出来使用,这样可以将WebView初始化时间降到几乎为0


副作用是内存占用上,首个WebView会占用十几兆内存,非首个WebView内存占用0.2M左右内存。另外Android里WebView是和Activity进行绑定的,为了避免内存泄露,我们在预先创建的时候,借助Context的中间层MutableContextWrapper,使用MutableContextWrapper包裹applicationContext的方式去提前创建WebView,当使用时,将context置为activity的即可。


// 预创建WebView:
MutableContextWrapper contextWrapper = new MutableContextWrapper(applicationContext);
mPool[0] = new WebView(contextWrapper);
// 使用WebView
((MutableContextWrapper)webview.getContext()).setBaseContext(activityContext);

3、独立进程


Android允许一个app同时存在多个进程,可以根据需要把不同的模块放到不同进程中处理。

好处

1.有效增大App的运存,减少由webview引起的内存泄露对主进程内存的占用。

2.避免WebView的Crash影响App主进程的运行。

3.拥有对WebView独立进程操控权。

弊端

WebView进程与其他进程通讯的方式,把webview独立进程之后会发现,埋点功能和接收主进程数据都不正常了,这里就涉及到进程间通讯的问题了;

进程通讯大概就是这几种,aidl,messager,content provider,广播;

<!-- 在AndroidManifest中配置  android:process=":webview"      -->
<!--  **进程格式:包名+冒号+进程名    ----默认包名可以不写  格式:冒号+进程名  
:webview
**    -->
 <activity
          android:name=".ui.details.WebViewActivity"
            android:process=":webview"
             android:screenOrientation="portrait" />
目录
相关文章
|
8月前
|
缓存 JavaScript 前端开发
vscode的webview性能优化总结
vscode的webview性能优化总结
100 0
|
API Android开发 数据安全/隐私保护
解决android webview 加载http url 失败 net::ERR_CLEARTEXT_NOT_PERMITTED 错误
解决android webview 加载http url 失败 net::ERR_CLEARTEXT_NOT_PERMITTED 错误
1192 0
|
7月前
|
Web App开发 移动开发 前端开发
52. 【Android教程】网页视图:WebView
52. 【Android教程】网页视图:WebView
113 1
|
6月前
|
Web App开发 JavaScript 前端开发
Android端使用WebView注入一段js代码实现js调用android
Android端使用WebView注入一段js代码实现js调用android
170 0
|
Android开发 iOS开发 UED
Android webView 实现阻尼回弹效果
iOS webView默认滑动到顶部或者底部的时候,还可以继续通过手指拉扯滑动,松手后回弹;而Android webView默认是不行的,要实现跟iOS一样的效果,就需要自定义webView。
616 0
|
8月前
|
JavaScript 前端开发 Android开发
android开发,使用kotlin学习WebView(详细)
android开发,使用kotlin学习WebView(详细)
570 0
|
定位技术 Android开发
[√]Android webview的url scheme
[√]Android webview的url scheme
565 0
|
JavaScript 前端开发 Android开发
Android AgentWeb WebView 与js交互总结
Android AgentWeb WebView 与js交互总结
382 0
|
JavaScript 前端开发 Android开发
Android 中WebView的使用详解
Android 中WebView的使用详解
1322 0