2025-05-17

 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作瞭不少修改。
 
摘自  註釋段link

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *