在前一篇文章里我提到了浏览器插件的两种渲染模式
最近下载了2.2的源码包,观察了一下相关的代码,发现surface 模式的加载过程有了些改变。
首先,原本2.1的surface 加载时是这样的:
简单地说就是,plugin告知webkit 自己view的java类,webkit 以此在java侧获取插件的view。
到了2.2,surface的加载变成了下图这样:
到了2.2,android 浏览器插件的底层得到了更多的操作java对象的权利。如果webkit 需要获取插件的view,会调用npp_getvalue(nppvariable == kjavasurface_anpgetvalue)(这是2.2的android _npapi.h里新定义的)。这时候plugin侧会调用anpsysteminterface里的loadjavaclass 函数获取自己的pluginstub的类对象,这个函数返回一个jclass 的c/c++对象(对应java里的class 对象),然后插件会在native侧直接调用这个类的构造函数(通过jni)得到一个新的pluginstub对象,作为npp_getvalue的结果返回给浏览器。浏览器的native侧获取到这个对象以后,通过jni调用java侧的(webviewcore.addsurface函数)把view加到页面视图中,surface的加载到此完成。
具体的过程大家可以参照2.2版的browserplugin
本文来自csdn博客,转载请标明出处:http://blog.csdn.net/qyqzj/archive/2010/07/04/5712151.aspx
android开发论坛
棒槌网@Android相关文章推荐:
Android2.2浏览器插件的surface加载过程的改变
浏览器插件设置过程
Android浏览器的插件渲染模式简介
Android浏览器插件开发(一)
Android浏览器插件开发(二)
android2.2默认浏览器无法识别手势放大与缩小
Android浏览器插件(plugin)开发入门(三)