在一些国家/地区,数据套餐的费用可能高达典型用户月收入的 10%。这意味着,最大程度地减少应用的下载大小并让用户控制应用如何使用数据,可以为许多用户带来巨大且切实的益处。最小化下载大小也有助于节省内部存储空间,而内部存储空间在某些设备上是稀缺资源。
在这里,您可以找到一些策略来帮助优化应用使用的流量,包括网络流量和内部存储空间。
减小应用大小
减少应用大小是帮助用户减少流量消耗(包括网络流量和内部存储空间)的基本方法之一。本部分介绍了几种减少应用大小的方法。
减少 APK 图形资产大小
- 图形资产通常是 APK 大小的最大贡献者。优化这些资产可以减少下载量,从而加快用户的安装速度。
- 对于图标等图形资产,请使用可缩放矢量图形 (SVG) 格式。与位图图形相比,SVG 图像的大小非常小,并且可以在运行时渲染到任何分辨率。 Android 支持库 为矢量资源提供了一个向后兼容的实现,适用于 Android 2.1(API 级别 7)。您可以通过 这篇 Medium 文章 开始使用矢量。
- 对于照片等非矢量图像,请使用 WebP 来减少图像加载时间并节省网络带宽。WebP 被证明可以产生比 PNG 和 JPG 对等文件更小的文件大小,同时保持至少相同的图像质量。即使在有损设置下,WebP 也可以生成与原始图像几乎相同的图像。Android 从 Android 4.0(API 级别 14:冰淇淋三明治)开始包含有损 WebP 支持,并从 Android 4.2(API 级别 17:果冻豆)开始支持无损透明 WebP。
- 如果您在多个密度中拥有许多大型图像,请考虑使用 多 APK 支持 按密度拆分 APK。这将生成针对特定密度的构建版本,这意味着低密度设备的用户无需承担下载未使用的⾼密度资产的负担。
- 有关减少 APK 大小的更多信息,请参阅 减少 APK 大小 和 缩减代码和资源。此外,您可以在 这系列 Medium 文章 中找到有关减少 APK 大小的详细指南。
减少代码大小
- Android 项目中的每个库都会向 APK 添加可能未使用的代码。在使用外部库时要格外小心,因为并非所有库都设计用于移动应用。确保应用使用的库针对移动使用进行了优化。
- 考虑使用 ProGuard 等工具优化已编译的代码。ProGuard 会识别未使用代码并将其从 APK 中移除。还可以通过在
build.gradle
中设置minifyEnabled=true
和shrinkResources=true
在构建时 启用资源缩减,这会自动从 APK 中移除未使用的资源。 - 使用 Google Play 服务时,应 选择性地将 仅必要的 API 包含到 APK 中。
- 有关减少 APK 中代码大小的更多信息,请参阅 Android 培训,了解如何 避免依赖注入框架。
允许应用移动到外部 (SD) 存储
- 低成本设备通常配备的设备存储空间很少。用户可以使用 SD 卡扩展存储空间;但是,应用需要明确声明支持安装到外部存储,用户才能将其移动。
- 使用 AndroidManifest.xml 中的
android:installLocation
标志允许应用安装到外部存储。有关启用应用移动到外部存储的更多信息,请参阅 Android 指南中的 应用安装位置。
减少安装后应用磁盘使用量
- 保持应用的磁盘使用量较低,意味着当设备存储空间不足时,用户不太可能卸载应用。务必对缓存应用边界,这可以防止应用的磁盘使用量无限增长。请确保将缓存数据放在
getCacheDir()
中,系统可以根据需要删除此处放置的文件,因此它们不会显示为已分配给应用的存储空间。
提供可配置的网络使用
Android 平台包含许多方法,您可以通过这些方法让用户控制应用的网络使用情况,并针对其自身需求进行优化。例如,在首次使用时,您的应用可以引导用户完成各种与网络相关的设置。您还可以从应用外部提供网络首选项屏幕。
为用户的网络选择提供入门体验
- 允许用户减少数据用量的应用很受欢迎,即使它们本身的数据需求很大。如果您的应用使用大量带宽(例如,视频流应用),您可以为用户提供一个入门体验,让他们配置网络使用。例如,您可以允许用户在蜂窝网络上强制使用较低比特率的视频流。
- 提供其他设置供用户控制数据同步、预取和网络使用行为(例如,仅在 Wi-Fi 网络上预取所有收藏的新闻类别),也有助于用户根据自己的需求调整应用的行为。
- 有关管理网络用量的更多信息,请参阅 Android 培训中的管理网络使用。
提供网络偏好设置屏幕
- 您可以通过网络偏好设置屏幕从应用外部导航到应用的网络设置。您可以从系统设置屏幕或系统数据使用屏幕调用此屏幕。
- 要提供一个网络偏好设置屏幕,用户可以从您的应用内部以及系统设置中访问,请在您的应用中包含一个支持
ACTION_MANAGE_NETWORK_USAGE
操作的活动。 - 有关添加网络偏好设置屏幕的更多信息,请参阅 Android 培训中的实现偏好设置活动。
其他资源
要了解有关此主题的更多信息,请查看以下其他资源