【问题标题】:Why are fading edges slow?为什么褪色边缘很慢?
【发布时间】:2014-08-13 06:28:04
【问题描述】:

this answer 中所述,ScrollViews 中的淡入淡出可能很慢。我想知道,为什么?

“使用衰落边缘可能会导致明显的性能下降 并且只应在应用程序的视觉要求时使用 设计。要请求 API 级别 14 及更高级别的衰落边缘,请使用 android:requiresFadingEdge 属性改为"

http://developer.android.com/reference/android/R.attr.html#fadingEdge

我的兴趣源于两件事:

  • 希望使用渐变边缘为用户提供视觉提示
  • 在 PowerVR SGX 544 Galaxy S4 上使用渐变边缘时注意到 /extreme/ 性能损失。 (从 20-30 fps 下降到 0.2 fps),而在其他 GPU(例如 Adreno 320 HTC One)上没有看到性能损失

我认为可能褪色边缘在 SurfaceFlinger 中被实现为单独的层,并且它们通过硬件合成触发了 GLES 合成,但事实并非如此,根据this comment

【问题讨论】:

  • 我无法回答为什么,但你能看到设置android:hardwareAccelerated="true"时它是否表现更好?
  • Romain Guy 简要解释了here。这意味着更多的读取、写入和绘制。
  • 是的,请参阅 romainguy 的文章。由于性能问题,不鼓励使用边缘衰减。
  • Romain 的帖子是很有帮助的背景,但它不能解释 KitKat 设备上的差异。 (一方面是从 2008 年开始)。视图层次现在是用 GLES 绘制的(对吗?),少数启用混合的绘制应该 / 不 / 减慢 100 倍~。我想知道是否出于某种原因,S4 的 TouchWiz 4.4 构建会强制图层进入 CPU 绘图模式(通过调用 lockCanvas 或其他方式)。 FWIW,我的问题是关于 ScrollView,而不是 ListView,这是 Romain 帖子的主题。 @josephus 硬件加速已启用(目标 SDK = 19)。

标签: android scrollview


【解决方案1】:

更新:https://developers.google.com/events/io/sessions/325418001 Romain 大约 30 分钟提到了渐隐边缘是如何实现的,以及为什么该实现会使它们变慢。

我开始相信文档中的注释在今天的上下文中具有误导性,并且我偶然发现了一个不相关的病态不良情况。我发现通常褪色的边缘并不慢。链接的帖子告诉我们 Romain 对该功能的看法,尽管该注释直到 2011 年 9 月才添加。

不同的系统使用不同的绘图路径、不同的 GPU 驱动程序路径和不同的 GPU 硬件路径来进行渐隐边缘的实际渲染。我认为由于我试图展示的场景的复杂性,我超出了我特定手机的限制。

This commit 介绍了注释。它是在 Android 4.0 之前制作的,而 3.2.x 系列仍在发布中。我记得 Xoom 是一个有点慢的设备,我想一些褪色的边缘(默认情况下很容易制作)可能会将它拖到爬行状态。这似乎是进行更改和引入注释的一个很好的理由。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-09-15
  • 1970-01-01
  • 1970-01-01
  • 2011-02-08
  • 1970-01-01
  • 2014-06-18
  • 2011-10-16
相关资源
最近更新 更多