android的cache机制系列一

原创!转载请注明出自blog.csdn.net/lichwei1983


      打算写个android的cache机制系列文章,目前部分主题还出于列提纲阶段,慢慢完善吧。

1   安卓的焦点

      当在Node List中找到新焦点时,检查后发现如果与自己是兄弟姐妹,就把它push到stack里面。当所有的兄弟姐妹都被找到,换句话说是父亲的最后一个孩子被找到、并被放到stack里面,pop出此stack.注意:此stack不同于Tracker的stack,Tracker的stack只push带孩子的焦点。

      这种方式是诡异的:焦点-子焦点-孙焦点--如果我保存每一代的数字(比如自己是第1代,孩子是第2代,孙子是第3代),我能更快的断定一个节点是否是此焦点的父亲的孙节点。这种方法额外要求能找到孙节点的父亲。


2 CachedNode是什么?是保存Node的类

3 CachedFrame是什么? 是最重要的类,Cache引用的第一个节点总是Document,CachedFrame中保存了所有Frame相关的信息:

1 所有的Frame: WTF::Vector<CachedFrame> mCachedFrames,
2 所有节点(DOM::Node): WTF::Vector<CachedNode> mCachedNodes,
3 所有输入框:WTF::Vector<CachedInput> mCachedTextInputs,
4 所有layer:WTF::Vector<CachedLayer> mCachedLayers;如果使用混合加速的话,
5 所有颜色:WTF::Vector<CachedColor> mCachedColors。


4 CachedRoot是什么?是CachedFrame的子类,

5 CachedHistory是什么?维护一个最近访问的8个节点(Node)列表,用来代表历史访问。


WebViewCore::updateFrameCache()->

{

       CachedRoot* m_temp = new CachedRoot();


}

buildCache(CachedRoot* root)->

BuildFrame


  获取Frame的Document:

   Document* doc = frame->document();

   Node* parent = doc;

   把缓存的父节点初始化设置为Frame的document:

   cachedParentNode.init(parent);



你可能感兴趣的:(android的cache机制系列一)