【问题标题】:Should Android app make use of SVG's to maximum extent?Android 应用程序是否应该最大限度地利用 SVG?
【发布时间】:2016-08-30 13:44:52
【问题描述】:

官方文档Vector Asset Studio 指出,SVG 可用于减小 APK 大小。它还指出 SVG 需要很多 CPU 周期来绘制。

矢量图形的初始加载可能会花费更多的 CPU 周期,而不是 对应的光栅图像。之后,内存使用和性能 两者之间是相似的。我们建议您限制向量 图像最大为 200 x 200 dp;否则,可能需要很长时间才能 画。

此外,从 Lollipop 开始支持它。关于向后兼容性,它指出-

Android 4.4(API 级别 20)及更低版本不支持矢量绘图。 如果您的最低 API 级别设置为这些 API 级别之一,您有 使用 Vector Asset Studio 时的两个选项:生成便携式网络 图形 (PNG) 文件(默认)或使用支持库。

为了向后兼容,Vector Asset Studio 会生成栅格 矢量可绘制的图像。矢量和光栅可绘制对象是 打包在 APK 中。

光栅图像看起来比 SVG 更有效。此外,虽然 APK 的大小会减小,但 SVG 对内存和应用程序性能的影响是什么,因为文档指出绘制大型 SVG 文件需要时间。

作为一名 android 开发者,我的方法应该是什么?以上哪种方式或任何其他方式将确保我的应用程序得到优化并提供良好的性能。

编辑:然后是一个查询,两者中最好的方法应该是什么 -

  1. 使用 SVG 减小 apk 大小,但会增加绘图的 CPU 周期
  2. 使用光栅图像

【问题讨论】:

    标签: android performance user-interface svg


    【解决方案1】:

    根据我自己的经验,Vector Asset Studio 对它在 SVG 中接受的内容很挑剔。如果您不精通 SVG,您将很难将 SVG 标记转化为 VAS 接受的东西。我记得它不支持defsfilter,但某些矢量图形软件似乎包含它,即使它不是绝对必要的。给定平面图标(例如,没有渐变或阴影),您可以通过手动编辑标记来解决此问题。

    至于性能,它实际上取决于您将在每个屏幕上显示的图标数量,以及这些图标的复杂程度。您将不得不进行一些压力测试,以查看您的目标设备是否能够承受。请注意,这只会影响初始加载,在幕后这些矢量图像会被光栅化,并且 - 正如您引用的文本所述:Afterward, memory use and performance are similar between the two

    你的方法应该是务实的,尝试在屏幕上画几个图标,看看它是否顺利。这是一个主观问题,取决于设备和实施人员的限制。

    【讨论】:

      【解决方案2】:

      我使用react-native-svg 的体验非常好,但是需要重新计算动态 SVG 的动画性能受到了影响,我认为他们称之为'too many passes over the bridge'。可能有办法对其进行优化,我打算在我的下一个 RN 项目中对此进行研究。我应该通过强调只有在动画期间(在 JS 端)需要重新计算 SVG 时,动画才会受到影响。例如,有一个带有 SVG 的原生 ScrollView 组件,ScrollView 可以完美地执行动画,但是如果您想以编程方式更改 SVG 作为 React/JS 端的滚动位置的函数,您将遇到桥接问题,并且大量丢帧。

      这是我在 Android RN 中设置一些基本形状的样板: proto__33__boilerplate

      通常我会说(程序化)SVG 非常适合 Android,但我还没有找到一种将它们用于动画的高效方法。如果我发现会更新。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-03-27
        • 1970-01-01
        • 2018-07-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多