全球超过一半的用户将通过 2G 连接体验您的应用。为了改善他们的体验,请通过存储数据、请求排队和处理图片来优化低速连接和离线工作,以实现最佳性能。
您可以在此处找到有关如何实现这些目标的一些技巧。
优化图片
有多种方法可以使图片更容易下载。其中包括提供 WebP 图片、动态调整图片大小以及使用图片加载库。
提供 WebP 图片
- 通过网络提供 WebP 文件,以减少图片加载时间和节省网络带宽。WebP 文件通常比相应的 PNG 和 JPG 文件更小,且至少具有相同的图片质量。即使使用有损设置,WebP 也可以生成与原始图片几乎相同的图片。自 Android 4.0 (API 级别 14: Ice Cream Sandwich) 起,Android 就已包含有损 WebP 支持,自 Android 4.2 (API 级别 17: Jelly Bean) 起支持无损、透明 WebP。
动态调整图片大小
- 让您的应用根据设备规格请求目标渲染尺寸的图片,并让您的服务器提供适当尺寸的图片。这样做可以最大限度地减少通过网络发送的数据,并减少每张图片所需的内存量,从而提高性能和用户满意度。
- 当用户必须等待图片下载时,用户体验会下降。使用适当的图片尺寸有助于解决这些问题。考虑根据网络类型或网络质量发起图片尺寸请求;此尺寸可能小于目标渲染尺寸。
- 动态占位符(例如 预计算调色板值 或低分辨率缩略图)可以在获取图片的同时改善用户体验。
使用图片加载库
- 您的应用不应多次获取同一张图片。图片加载库,例如 Glide 和 Picasso,会获取图片、将其缓存,并提供与您的视图集成的钩子,以便在实际图片准备好之前显示占位符图片。由于图片已被缓存,下次请求图片时,这些库会返回本地副本。
- 图片加载库会管理其缓存,保留最新的图片,以便您的应用存储空间不会无限增长。
优化网络
您可以通过提供最佳网络体验来增强用户体验。例如,您可以使应用能够离线使用,使用 WorkManager 和 Room,并去除重复的网络请求。
使您的应用能够离线使用
- 在农村地区和欠发达地区,设备通常会丢失网络连接。创建有用的离线状态意味着用户可以随时与您的应用互动。为此,您可以通过本地存储数据、缓存数据以及在连接恢复时对传出请求进行排队来完成。
- 在可能的情况下,应用不应通知用户连接已丢失。只有当用户执行需要连接的操作时,才需要通知用户。
- 当设备缺乏连接时,您的应用应代表用户批量处理网络请求,以便在连接恢复时执行。一个例子是电子邮件客户端,它允许用户即使在设备离线时也可以撰写、发送、阅读、移动和删除现有邮件。这些操作可以被缓存并在连接恢复时执行。通过这样做,无论设备在线还是离线,应用都能够提供类似的用户体验。
使用 Room 获取和缓存数据
- 确保您的应用使用数据库或类似结构将所有数据存储在磁盘上,以便无论网络状况如何都能实现最佳性能。使用 Room 持久性库 将数据缓存到本地数据库中,并在设备有网络连接时使用 WorkManager 更新该缓存。
- 应用应缓存从网络获取的内容。在进行后续请求之前,应用应显示本地缓存的数据。这确保了无论设备离线还是连接到缓慢或不可靠的网络,应用都能正常运行。
去除重复的网络请求
- 离线优先架构最初会尝试从本地存储中获取数据,如果失败,则从网络请求数据。从网络检索后,数据会被本地缓存以供将来检索。这有助于确保对同一数据的网络请求只发生一次——后续请求将从本地满足。为此,请使用本地数据库存储长期数据(通常是
android.database.sqlite
或SharedPreferences
)。 - 这种架构还简化了应用在离线和在线状态之间的流程,因为一侧从网络获取数据到缓存,而另一侧则从缓存检索数据呈现给用户。
- 对于临时数据,请使用有限制的磁盘缓存,例如
DiskLruCache
。通常不会更改的数据应仅通过网络请求一次,并缓存供将来使用。此类数据的示例包括图片和非时效性文档,例如新闻文章或社交帖子。
微调数据传输
有几种方法可以让您的应用适应网络状况,以提供更好的用户体验。例如,它可以优先处理网络请求,以最大程度地缩短用户等待信息的时间。它还可以检测并适应较慢的网络速度以及网络连接中可能发生的变化。
优先处理带宽
- 您不应假定设备连接到的任何网络都是持久或可靠的。因此,应用应优先处理网络请求,以便尽快向用户显示最有用的信息。
- 立即向用户呈现可见且相关的信息比让他们等待可能不必要的信息能提供更好的用户体验。这减少了用户必须等待的时间,并提高了应用在慢速网络上的实用性。
- 为了实现这一点,请对您的网络请求进行排序,以便在富媒体之前获取文本。文本请求通常更小,压缩效果更好,因此传输速度更快,这意味着您的应用可以快速显示有用的内容。有关管理网络请求的更多信息,请访问有关管理网络使用情况的 Android 培训。
在较慢的连接上使用较少带宽
- 您的应用及时传输数据的能力取决于网络连接。检测网络质量并调整应用的使用方式有助于提供卓越的用户体验。
- 您可以使用以下方法检测基础网络质量。使用这些方法的数据,您的应用应调整其网络使用方式,以便继续对用户操作提供及时响应
- 在较慢的连接上,考虑仅下载较低分辨率的媒体,或者完全不下载。这可确保您的用户可以在慢速连接上使用该应用。如果您没有图片或图片仍在加载,应始终显示占位符。您可以使用 Palette 库 创建动态占位符,以生成与目标图片匹配的占位符颜色。
- 在搭载 Android 7.0 (API 级别 24) 及更高版本的设备上,用户可以开启 流量节省程序 设置,这有助于最大程度地减少数据使用量。Android 7.0 扩展了
ConnectivityManager
,以检测 流量节省程序 设置。有关此功能的更多信息,请参阅流量节省程序。
检测网络变化,然后更改应用行为
- 网络质量不是静态的;它会根据位置、网络流量和当地人口密度而变化。应用应检测网络变化并相应地调整带宽。通过这样做,您的应用可以根据网络质量调整用户体验。使用以下方法检测网络状态
- 随着网络质量下降,请减少请求的数量和大小。随着连接质量提高,您可以将请求增加到最佳水平。
- 在更高质量的非计量网络上,考虑预取数据,使其提前可用。从用户体验的角度来看,这可能意味着新闻阅读应用在 2G 网络上每次获取三篇文章,但在 Wi-Fi 上每次获取二十篇文章。有关根据网络变化调整应用行为的更多信息,请访问有关监控连接状态的 Android 培训。
- 当网络连接发生变化时,会发送广播
CONNECTIVITY_CHANGE
。当您的应用在前台运行时,您可以调用registerReceiver
来接收此广播。接收到广播后,您应该重新评估当前网络状态,并相应地调整您的 UI 和网络使用。您不应在清单文件中声明此接收器,因为它在 Android 7.0 (API 级别 24) 及更高版本中不可用。有关此以及 Android 7.0 中其他更改的更多信息,请参阅 Android 7.0 更改。
相关内容
额外资源
要了解更多关于支持各种连接速度的信息,请查看以下资源