coo*_*rok 10 performance android nine-patch xml-drawable android-drawable
为某些视图设置背景的最佳方法是什么?例如2个背景变体:
那么哪种变体会更好,九补丁或可绘制的xml资源?
Iva*_*sov 16
我的猜测是,NinePatch在大多数情况下会略快一些.这是我发现的.
GradientDrawable(用于xml中的rects的那个)使用这个代码来调用Canvas,然后使用本机调用导致SkCanvas,SkDraw最终SkScan和SkBlitter.
在另一方面,NinePatch的平局()几乎为零的Java代码之前,本地调用NinePatch.cpp它不久呼吁NinePatchImpl.cpp-NinePatch_draw() -而这也正是神奇的是.那里的代码遍历标记的区域,并且在一些后续调用之后使用大致相同的逻辑SkDraw(仅drawRect()代替drawPath())绘制东西,但最后它是相同的SkScan并且SkBlitter完成工作.
所有这些代码都很难立即包围我的脑袋,但是我的目的是,GradientDrawable如果它同时具有背景和笔划(看这里),则会对整个本机堆栈进行两次调用,而在任何情况下,NinePatch只有一个.
因此,如果没有实际测量两种方法的时间,我会在大多数情况下获得一种感觉NinePatch赢得比赛:如果我们[非常]大致假设本机调用堆栈drawRect()并drawPath()使用几乎相同的逻辑和[另一个可怕的简化]参数集获得在那里传递,NinePatch并且GradientDrawable不会影响方法的复杂性,然后NinePatch结果大约GradientDrawable是填充和轮廓的2倍.好吧,如果你使用一个常规的9节9-Patch(即不要用大量的标记来撕碎你的9-Patch,那么迭代就会过于昂贵).
任何人都会偶然发现这个并且对这个主题有更多了解(和/或更好地估计本机代码的复杂性),如果我错了,请纠正我.
PS是的,我知道这不是一个直接的答案
| 归档时间: |
|
| 查看次数: |
3208 次 |
| 最近记录: |