数十亿设备的适配能力

覆盖更多用户意味着需要支持越来越多的 Android 平台版本和设备规格。为了改善用户体验,请针对常见的 RAM 配置以及屏幕尺寸和分辨率进行优化。

支持多种屏幕尺寸

如果您的应用支持各种尺寸和分辨率的屏幕,则可以为数十亿用户提供更好的用户体验。本部分介绍了一些您可以使用的方法。

使用与密度无关的像素 (dp)

  • 使用像素定义布局尺寸效果不佳,因为不同的屏幕具有不同的像素密度,因此相同数量的像素可能在不同设备上对应不同的物理尺寸。
  • 为了克服这个问题,Android 支持与密度无关的像素 (dp),它对应于每英寸 160 点 (mdpi 密度) 下像素的物理尺寸。
  • 使用 dp 定义布局可确保用户界面的物理尺寸与设备无关。访问 Android 关于 支持多种屏幕 的指南,以了解有关使用与密度无关的像素的最佳实践。

在 ldpi 和 mdpi 屏幕密度上测试文本和图形

  • 测试以确保您的文本和图形在低密度和中密度 (ldpi 和 mdpi) 屏幕上也能正常工作,因为这些是 常见的密度,尤其是在低成本设备中。注意在低密度屏幕上可能不清楚的文本,因为在这些屏幕上无法看到精细的细节。
  • 密度较低的屏幕的设备往往具有较低的硬件规格。为了确保您的应用在这些设备上也能正常运行,请考虑减少或消除繁重的图形处理负载,例如动画和过渡。
  • 有关支持不同密度的更多信息,请参阅 Android 关于 支持不同密度 的培训。

在小型和中型屏幕尺寸上测试布局

  • 通过在较小的屏幕上进行测试,验证您的布局是否可以缩小。随着屏幕尺寸的缩小,对可见的 UI 元素要非常谨慎,因为它们的空间有限。
  • Material Design 指南介绍了 指标和基线,以确保您的布局能够跨屏幕密度进行缩放。
  • 有关支持不同屏幕尺寸的更多信息,请参阅 Android 关于 支持不同屏幕尺寸 的培训。

提供向后兼容性

并非所有用户都使用最新的 Android 平台版本驱动的设备。以下是一些您可以用来改善向后兼容性的方法,有助于让您的应用尽可能多地提供给用户。

适当地设置 targetSdkVersionminSdkVersion

  • 应用应构建并定位最新的 Android 版本,以确保它们在各种设备上提供最新的行为;这仍然提供了对旧版本的向后兼容性。以下是适当地定位 API 级别的一些最佳实践
    • targetSdkVersion 应为最新的 Android 版本。定位最新的版本可确保您的应用在运行更新版本的 Android 时继承更新的运行时行为。在更新 targetSdkVersion 时,请务必在更新的 Android 版本上测试您的应用,因为它可能会影响应用的行为。
    • minSdkVersion 设置最低支持的 Android 版本。设置 minSdkVersion 还会导致 Android 构建工具报告旧版本平台中可能不可用的新 API 的不正确使用情况。通过这样做,您可以防止无意中破坏向后兼容性。
  • 查阅 Android 仪表盘、您的应用的 Google Play 开发者控制台 以及目标市场中的行业研究,以根据目标用户评估要定位的 Android 版本。

使用 Android 支持库

  • 通过使用 Android 支持库,确保您的应用在各个操作系统版本中提供一致的体验。此库提供了 Android 框架 API 的向后兼容版本,以及仅通过库 API 可用的功能,例如 AppCompatActivity 和 Material Design 支持库。
  • 一些亮点包括
  • 有关可用支持库的更多信息,请参阅 Android 开发者网站的 支持库功能 部分。

使用 Google Play 服务

  • Google Play 服务提供了 Google API 的最佳功能,独立于 Android 平台版本。请考虑使用 Google Play 服务中的功能,以便在 Android 设备上提供最简化的 Google 体验。
  • Google Play 服务还包含有用的 API,例如 GcmNetworkManager,它为旧版 Android 提供了 Android 5.0 的 JobScheduler API 的大部分功能。
  • Google Play 服务的更新由 Google Play 商店自动分发,客户端库的新版本通过 Android SDK 管理器提供。

有效利用内存

内存是用户体验中一个默默无闻的英雄。良好的内存管理可以使您的应用更稳定,性能更佳;在某些情况下,有效利用内存可能是使您的应用可用所需的唯一因素。以下是一些帮助您的应用明智地使用内存的方法。

减少低成本设备上的内存占用

  • 动态调整内存占用,以确保与具有不同 RAM 配置的设备的兼容性。
  • 诸如 isLowRamDevice()getMemoryClass() 之类的方法有助于在运行时确定内存限制。根据这些信息,您可以缩减内存使用量。例如,您可以在低内存设备上使用较低分辨率的图像。
  • 有关管理应用内存的更多信息,请参阅 Android 培训课程 管理应用的内存

避免长时间运行的进程

  • 长时间运行的进程会驻留在内存中,并可能导致设备速度变慢。在大多数情况下,您的应用应在特定事件唤醒,处理数据,然后关闭。您应该使用 Firebase Cloud Messaging (FCM) GcmNetworkManager 来避免长时间运行的后台服务,并减少用户设备上的内存压力。

内存使用基准测试

Android Studio 提供了内存基准测试和分析工具,使您能够在运行时衡量内存使用情况。对应用的内存占用进行基准测试使您能够监控多个应用版本的内存使用情况。这有助于捕获意外的内存占用增长。使用内存分析器工具执行以下操作

  • 了解不良垃圾回收 (GC) 事件模式是否可能导致性能问题。
  • 识别意外或不必要地获取或保留分配的对象类型。
  • 确定代码中可能存在问题的位置。

有关内存使用基准测试的更多信息,请参阅 使用内存分析器查看堆和分配

针对运行 Android (Go 版) 的设备进行优化

Android (Go 版) 是一种针对入门级设备(RAM ≤1GB)的优化体验,从 Android Oreo (Go 版) 开始。为了确保您的应用在 Android (Go 版) 设备上运行良好,您应该考虑以下指南

  • targetSdkVersion 应为最新版本的 Android。Android (Go 版) 设备仅运行 Android Oreo(API 27 或更高版本)。
  • 应用应在 RAM ≤1GB 的设备上流畅运行。请记住上面 有效利用内存 中列出的内存优化,并使用 Android 指标 来识别并修复诸如渲染缓慢和画面冻结等不良行为。
  • 画中画 (PIP) 在某些设备上可能被禁用。在您的应用使用 PIP 之前,请通过调用 hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE) 来确保其可用性。
  • 设备上的应用大小应小于 40MB。
  • 应用 RAM 使用量的比例集大小 (PSS) 不应超过 90MB。对于游戏,游戏 RAM 使用量的 PSS 不应超过 150MB。有关 PSS 的更多信息,请参阅 调查您的 RAM 使用情况 指南。
  • 应用的启动时间应尽可能短,并在 5 秒内完成。
  • SYSTEM_ALERT_WINDOW(允许应用在其他应用之上绘制窗口)在 RAM 较低的 Android Go 设备上可能被禁用。在绘制其他应用之上之前,请通过调用 Settings.canDrawOverlays() 检查您的应用是否具有此授权。如果您的应用无法获取权限,请优雅地降级您的应用,以便用户可以继续使用您的应用,例如禁用需要 SYSTEM_ALERT_WINDOW 权限的功能。

我们建议大多数开发者优化其现有的应用,该应用将在所有 Android (Go 版) 设备上可用,因为使您的应用运行更快、更轻便将使您的所有受众受益。您可以使用 Play 控制台上的 多个 APK 功能 为 Android (Go 版) 设备分发特定的 APK,但您应该在不影响体验的情况下这样做(例如,您应该避免删除功能)。针对 Android (Go 版) 设备的 APK 需要声明 <uses-feature android:name="android.hardware.ram.low" android:required="true">,至少针对 API 级别 26,并且版本号高于非 Go 版 APK。

其他资源

要了解有关支持各种设备的更多信息,请查看以下资源

博文