灯火互联
管理员
管理员
  • 注册日期2011-07-27
  • 发帖数41778
  • QQ
  • 火币41290枚
  • 粉丝1086
  • 关注100
  • 终身成就奖
  • 最爱沙发
  • 忠实会员
  • 灌水天才奖
  • 贴图大师奖
  • 原创先锋奖
  • 特殊贡献奖
  • 宣传大使奖
  • 优秀斑竹奖
  • 社区明星
阅读:2848回复:0

Android浏览器的插件渲染模式简介

楼主#
更多 发布于:2012-09-06 14:06

Android2.1的浏览器插件有两种渲染模式,在Android_npapi.h里的定义分别是:
        kBitmap_ANPDrawingModel = 0;
        kSurface_ANPDrawingModel = 1;
        (后面简称bitmap模式和surface模式)。
在实例初始化的时候(Plugin函数列表的newp被调用时),Plug-in需要告知浏览器采用何种渲染方式。

下面就对这两种渲染方式作简要介绍:

1.bitmap模式



kBitmap_ANPDrawingMode是传统的渲染方式,这种方式下,浏览器的底层会通过调用Plug-in提供的NPP_HandleEvent函数触发绘制事件,并把要渲染的bitmap的地址作为参数的一部分传给plug-in,plug-in只需要使用在初始化时获取到的相关的ANPinterface进行绘制即可。这种模式下,plug-in不需要考虑缩放问题,画面的缩放会由webkit自行处理。

//===================================

2.surface模式




kSurface_ANPDrawingMode带有Android平台的特殊性,因为这种模式是需要java侧配合的。这种模式下,Plug-in会在初始化时把自己的PluginStub的类名告知webkit,webkit会根据这个类名,并结合npp参数,在java侧获取到对应的view,并加到自己的布局里面。要使用这种模式,plug-in必须实现一个继承于PluginStub的类,这个类和SurfaceView有点类似,而且需要自己实现缩放。

根据Android_npapi.h里的描述,Surface模式的性能要比bitmap模式好,但是我在模拟器上测试时发现surface模式在缩放时会出现闪烁。不过现在Android2.2的nexus one上的flash10.1貌似就是surface模式的,但是没有闪烁,看来google为了支持Flash,在最近几版Android上对webkit作了不少修改。


喜欢0 评分0
游客

返回顶部