Android webkit image的加载过程解析
#############################################
本文为极度寒冰原创,转载请注明出处#############################################webkit有一个预下载的功能,主要是对img,script,link,input的标签的内容进行预下载。
我们知道了预下载的下载过程,但是预下载的内容是怎么被读取的呢?
这部分准备用两天的时间进行研究。
读取一个预下载的内容,准备从img标签开始进行研究。原因是img的内容我们比较直观,相比较于script我们也更加的容易理解.
前面的分析可以得到,img的标签主要对应的是HTMLImage方面的内容,在html的目录下找到了这两个文件。HTMLImageLoader与HTMLImageElement
分析还是从我们熟悉的堆栈开始:
void ImageLoader::updateFromElement(){ .... //重要:获取 src属性的值 AtomicString attr = client()->sourceElement()->getAttribute(client()->sourceElement()->imageSourceAttributeName()); ... // Do not load any image if the 'src' attribute is missing or if it is // an empty string. CachedResourceHandle<CachedImage> newImage = 0; if (!attr.isNull() && !stripLeadingAndTrailingHTMLSpaces(attr).isEmpty()) { //重要:根据url(attr的值),创建一个request,通过该request获取图片 CachedResourceRequest request(ResourceRequest(document()->completeURL(sourceURI(attr)))); request.setInitiator(client()->sourceElement()); ..... if (m_loadManually) { bool autoLoadOtherImages = document()->cachedResourceLoader()->autoLoadImages(); <strong> </strong>document()->cachedResourceLoader()->setAutoLoadImages(false); newImage = new CachedImage(request.resourceRequest()); //创建image对象 newImage->setLoading(true); newImage->setOwningCachedResourceLoader(document()->cachedResourceLoader()); document()->cachedResourceLoader()->m_documentResources.set(newImage->url(), newImage.get()); document()->cachedResourceLoader()->setAutoLoadImages(autoLoadOtherImages); } else newImage = document()->cachedResourceLoader()->requestImage(request); //直接获取一个cached的image对象 ....}这篇文章的分析就到此结束,大致讲述了一个img文件的加载过程。
当然,加载之后的处理是非常非常复杂的,接下来会继续进行分析。