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" />
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

夢鑰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值