2014年4月27日 星期日

Hardware Acceleration 的陷阱

最近寫了個程式,剛好要利用 Canvas 中的 clipPath() 函式來繪圖。結果是,不管我如何呼叫 Canvas.clipPath(),似乎一點作用也沒有。最後才發現,原來是 hardware acceleration (硬體加速) 這個系統功能搞的鬼。

Hardware acceleration 是從 Android 3.0 開始,Android 繪圖系統利用 GPU 支援的 OpenGL 渲染功能來加速 2D 圖像繪製的一種新功能。硬體加速?可以加速繪圖的速度,這聽起來似乎很美好。不過實際上,這個功能有很多的限制。例如,Canvas.clipPath() 在 API 17 之前就是不支援的。

這個連結中 列出所有硬體加速功能的限制。很複雜吧!更糟的是,只要你的 minSdkVersion 或是 targetSdkVersion 設定為 14 以上,這硬體加速功能,預設竟然是開啟的!

如果你的應用需要用到的 Canvas 的各式繪圖函式,而結果又出乎你預期時,我會建議你先關掉硬體加速功能,試試看是否因為這個原因所導致的。

要關閉硬體加速功能,最簡單的方法是加上 android:hardwareAccelerated="false" 這個屬性到 AndroidManifest.xml 中的 Application 標籤中。不過這個方法會讓你應用中的所有 View 的繪製都不允許硬體加速。這似乎有點極端,所以 Android 也提供 Window based 或 View based 的關閉方法。當你確定應用的不正常行為是因硬體加速功能所導致,這時你可以利用前述方法,將某些 Views 或 Windows 的硬體加速功能關掉即可。

2 則留言:

thanida 提到...

Thanks for the post you have shared here. I would like to recommend this blog for my friends to read more.
คาสิโนออนไลน์

supersonic100g9 提到...

รถเช่าสุวรรณภูมิ สำหรับผู้ที่เดินทางมาจากเมืองนอก หรือชนบท มาลงเครื่องที่ท่าอากาศยานสุวรรณภูมิ เพื่อมาท่องเที่ยว หรือทำธุระต่างๆถ้าหากท่านกำลังมองหารถเช่า พวกเราขอเสนอแนะ Banana rent-a-car รถเช่าคุณภาพดี ราคาไม่แพง รถยนต์ทุกคันผ่านการตรวจสอบก่อนมอบรถยนต์ ฉะนั้นสามารถมั่นอกมั่นใจได้ว่าทุกการเดินทางของคุณจะไม่มีอันตราย ไร้กังวล เนื่องจากว่าพวกเราเป็น บริษัทรถยนต์เช่าที่พร้อมให้บริการ #รถเช่าสุวรรณภูมิ

บริษัทรถเช่า
รถเช่าสุวรรณภูมิ
รถเช่าระหว่างซ่อม
รถเช่าไม่ใช้บัตรเครดิต
เช่ารถเก๋ง
รถรับส่งสนามบิน


張貼留言