天天看点

Android2.2浏览器插件的surface加载过程的改变  -  棒槌网@Android开发论坛 - Powered by phpwind

在前一篇文章里我提到了浏览器插件的两种渲染模式

最近下载了2.2的源码包,观察了一下相关的代码,发现surface 模式的加载过程有了些改变。

首先,原本2.1的surface 加载时是这样的:

Android2.2浏览器插件的surface加载过程的改变  -  棒槌网@Android开发论坛 - Powered by phpwind

简单地说就是,plugin告知webkit 自己view的java类,webkit 以此在java侧获取插件的view。

到了2.2,surface的加载变成了下图这样:

Android2.2浏览器插件的surface加载过程的改变  -  棒槌网@Android开发论坛 - Powered by phpwind

到了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)开发入门(三)