WebView预加载
第一次打开 Web 页面 , 使用 WebView 加载页面的时候特别慢 ,第二次打开就能明显的感觉到速度有提升 ,为什么 ? 是因为在你第一次加载页面的时候 WebView 内核并没有初始化 , 所以在第一次加载页面的时候需要耗时去初始化 WebView 内核 。可以在恰当时机,提前初始化 WebView 内核。
什么时候出时候webviewpool?例如进入课程列表的时候可以出时候webviewpool,在webviewpool创建init个webview
WebView预加载
如果你大量使用 WebView 那么我建议你可以考虑一下复用 WebView , 如果你的应用只是在某些页面使用了 WebView 那么我建议你放弃复用 WebView , 因为复用 WebView 并不会给你带来多大的性能提升而且会带来一些问题 。
h5课件刚好满足webview复用要求,h5课件是多个h5页面组成的一个课件。 通常一个h5页面是由通用资源(背景等)+独有资源(题目)构成,所以可以将这样的h5页面拆分成base和config两个部分,base进行复用,config独享
每个h5页面数据对应三个url,loadUrl,preloadUrl,finalLoadUrl,
只有loadUrl表示这个页面不能复用,
有preloadUrl,finalLoadUrl表示这个页面可以复用,先加载preloadUrl,再加载finalLoadUrl,加载finalLoadUrl实际上是给h5发消息让其重新加载新的config部分。
webviewpool考虑了内存大小,是否处于低内存,以及webview权重来缓存webview。另外还提供了下个页面的预加载功能(在当前页面加载完毕之后)。
webview没加载过url ,权重-1 webview加载过不可复用url ,权重0 webview加载过可复用url ,权重1
webviewpool维护一个按权排序的webview的map
webview 加载一个url的时候,会记录这个webview和url对应关系,
寻找过程: 0,pool中没有webview 创建一个 1,先找preloadurl匹配的 2,判断pool中第一个webview的权重是否小于等于0,如果是直接返回(返回的是没加载过url或者加载不可复用url的webview) 3,否则,如果当前不是低内存,创建一个 4,当前是低内存,取pool中第一个,可能是加载了preloadurl的webview 5,先设置成VISIBLE
10,回收过程: 1,先设置成INVISIBLE,加入到pool中 2,大于webview上限,或者低内存,删除一个最低优先级的webview。
当前页面ready之后会从pool匹配对应的webview预加载下一页的h5页面。