簡體   English   中英

我應該使用什么來獲得更好的性能,九修補程序或可繪制的xml資源?

[英]What should i use for better performance, nine-patch or drawable xml resource?

為某些視圖設置背景的最佳方法是什么? 例如backround的2個變體:

  1. 具有漸變,圓角和邊框的背景
  2. 只有一種顏色和圓角的背景

那么,九個補丁或可繪制的xml資源哪個更好?

我的猜測是,在大多數情況下, NinePatch會稍微快一些。 這是我發現的。

GradientDrawable (用於xml中的SkCanvas 代碼 )使用此代碼來調用Canvas ,后者又使用本機調用導致SkCanvasSkDraw以及最終的SkScanSkBlitter

在另一方面, NinePatch的平局()幾乎為零的Java代碼的原生之前調用NinePatch.cpp不久調用NinePatchImpl.cpp - NinePatch_draw() ---而這也正是神奇的是。 那里的代碼會遍歷標記的區域,並且在隨后的多次調用中,使用SkDraw大致相同的邏輯繪制東西(僅使用drawRect()而不是SkDraw drawPath()SkScan SkBlitter ,但最后還是由相同的SkScanSkBlitter來完成工作。

所有這些代碼很難立即吸引我,但是讓我吃驚的是,如果GradientDrawable同時具有背景和筆觸,那么它將對整個本機堆棧進行兩次調用( 請看此處 ),而在任何情況下, NinePatch只會使一。

因此,在大多數情況下,我並沒有實際衡量這兩種方法的時間,我感覺NinePatch贏得了比賽:如果我們[ NinePatch ]粗略地假設drawRect()drawPath()本機調用堆棧使用的邏輯幾乎相同,而[另一個糟糕的是簡化] ,由NinePatchGradientDrawable創建並傳遞到那里的參數集對方法的復雜性影響不大,因此NinePatch結果比帶有填充和輪廓的GradientDrawable快約2倍。 好吧,只要您使用常規的9節9貼片(即不要用大量標記切碎9貼片,那么遍歷整個片段的工作就會非常費力)。

任何會偶然發現這一點並且對這個主題了解更多的人(和/或更擅長估計本機代碼的復雜性),如果我錯了,請糾正我。

PS是的,我知道這不是一個直接的答案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM