android – 绘制大型位图时非常慢的nSyncAndDrawFrame

android – 绘制大型位图时非常慢的nSyncAndDrawFrame,第1张

概述我想用多个大型位图优化视差滚动视图.在我的Nexus 5上,一切都很顺利,Traceview转储如下所示: doFrame()方法使用~18 ms完成. 但是,在使用我的Nexus 7或Android 6 Emulator(Genymotion)时,Traceview转储如下所示: 运行完全相同的应用程序时,nSyncAndDrawFrame方法现在需要大约300毫秒. 有趣的代码部分位于视差视图 我想用多个大型位图优化视差滚动视图.在我的Nexus 5上,一切都很顺利,TracevIEw转储如下所示:

doFrame()方法使用~18 ms完成.

但是,在使用我的Nexus 7或AndroID 6 Emulator(Genymotion)时,TracevIEw转储如下所示:

运行完全相同的应用程序时,nSyncAndDrawFrame方法现在需要大约300毫秒.

有趣的代码部分位于视差视图的onDraw()中:

for (int i = 0; i < parallaxConfigManager.getNumberOfLayers(); i++) {            Bitmap layer = parallaxConfigManager.getLayer(i);            float dx = (offset * parallaxConfigManager.getScrollSpeedFactorForLayer(i) * imageScaleFactor);            int offset = Math.round(-parallaxConfigManager.getBoardOffset(i) + dx);            srcRect.offsetTo(offset,0);            int realWIDth = getRealWIDth(srcRect,layer.getWIDth());            float scaleFactor = destRect.wIDth() / (float) srcRect.wIDth();            if (realWIDth < srcRect.wIDth()) {                destRect.left       = (int) (scaleFactor * Math.max(0,-srcRect.left));                destRect.right      = destRect.left + (int) (scaleFactor * realWIDth);            }            destRect.bottom = Math.min(screenHeight,(int) (scaleFactor * layer.getHeight()));            canvas.drawBitmap(layer,srcRect,destRect,paint);            destRect.left = 0;            destRect.right = screenWIDth;        }

但是,这段代码足够快.缓慢的部分是在AndroIDs本机nSyncAndDrawFrame()中.

这可能是什么问题?有没有办法深入研究这个问题?现在这个方法是一个黑盒子,因为我看不到本机调用堆栈.

解决方法 在遇到与CollapsingToolbarLayout中的大图像(1920×933)类似的行为后,我偶然发现了这个问题.分析器显示调用androID.vIEw.ThreadedRenderer.nSyncAndDrawFrame()需要很长时间才能完成.

虽然降低图像分辨率(例如,到1280×622)将消除问题,但有一种方法可以完全避免这个问题.

将图像移动到drawable-nodpi文件夹,这表示图像与分辨率无关.渲染延迟应该消失.

总结

以上是内存溢出为你收集整理的android – 绘制大型位图时非常慢的nSyncAndDrawFrame全部内容,希望文章能够帮你解决android – 绘制大型位图时非常慢的nSyncAndDrawFrame所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/web/1135642.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-30
下一篇2022-05-30

发表评论

登录后才能评论

评论列表(0条)

    保存