为什么在Android上setColor这么慢

时间:2016-01-13 21:16:37

标签: java android performance codenameone

我在OPO设备上对我们的一些代码进行基准测试,这通常非常快,而且我看到很多“怪异”的性能怪异。在深入研究Android本机代码之前,我想我会问这里。

我所看到的是,paint.setColor(argbInt)的呼叫执行时间大约是以下呼叫的5倍:

paint.setStyle(Paint.Style.FILL);
paint.setAntiAlias(false);
canvas.drawRect(x, y, x + w, y + h, paint);
paint.setAntiAlias(antialias);

现在绘制矩形发生在GPU上所以我猜我没有看到任何开销。但为什么我应该为油漆颜色增加开销呢?

作为一个自然的后续行动,我该如何减少开销呢?

我也看到了canvas.restore()的相当大的开销(大约比上面的代码慢4倍),但我想这可能是有意义的,因为它可能是一个复杂的操作。我只是不明白为什么setColor会变慢?

为了记录,我在一个带有System.nanoTime()的OPO上测试了它的性能,并且在性能方面非常一致(不是突然的GC侥幸等等)。

1 个答案:

答案 0 :(得分:0)

即使在通过代码挖掘之后,我也找不到“为什么”这种情况发生的真正答案。我的解决方案是为我们主题中的每个样式缓存 <div class="form-group"> <div class="signup-profile-row-96"> <div>Crop Image and Upload</div> <button class="row-left btn btn-primary" ngf-select ng-model="picFile" accept="image/*"> Select Picture</button> <div ngf-drop ng-model="picFile" ngf-pattern="image/*" class="cropArea"> <img-crop image="picFile | ngfDataUrl" result-image="croppedDataUrl" result-image-quality="0.4" result-image-size="450" result-image-format="image/jpeg" ng-init="croppedDataUrl=''"> </img-crop> </div> <div><br/> <img ng-src="{{croppedDataUrl}}" /> </div><br/> <button class="row-left btn btn-primary" ng-click="upload(croppedDataUrl, picFile)">Submit</button> <span class="progress" ng-show="progress >= 0"> <div style="width:{{progress}}%" ng-bind="progress + '%'"></div> </span> <span ng-show="result">Upload Successful</span> <span class="err" ng-show="errorMsg">{{errorMsg}}</span> </div> </div> 个对象,因此重新绘制具有类似设置的组件可以重用先前设置的值。这似乎确实对绩效产生了积极影响。