数十亿用户的设备能力

赢得新用户意味着支持日益多样化的 Android 平台版本和设备规格。若要改善用户体验,需针对常见 RAM 配置、屏幕尺寸以及分辨率进行优化。

支持多种屏幕尺寸

如果应用支持各种尺寸和分辨率的屏幕,就可为数十亿用户提供更出色的用户体验。为此,本部分介绍了下列几种实践方法。

使用密度无关像素 (dp)

  • 使用像素定义布局尺寸的效果并不理想,因为不同的屏幕具有不同的像素密度,因此相同数量的像素在不同设备上可能对应于不同的物理尺寸。
  • 为解决此问题,Android 支持密度无关像素 (dp),相当于每英寸 160 点(中等像素密度)下像素的物理尺寸。
  • 使用 dp 定义布局可确保界面的物理尺寸在任何设备上都保持一致。不妨参阅有关支持多种屏幕的 Android 指南,了解有关使用密度无关像素的最佳做法。

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

  • 测试文本和图形以确保其在低密度和中密度(ldpi 和 mdpi)屏幕上正常显示,因为这些密度是常见密度,在低成本设备上更是如此。注意低密度屏幕上不清晰的文本,其中细节部分不可见。
  • 对于屏幕密度较低的设备,其硬件规格也往往较低。为确保应用在这些设备上顺利运行,请考虑降低或消除繁重的图形处理负载,如动画和过渡效果。
  • 如需了解有关支持不同密度的详细信息,请参阅有关支持不同密度的 Android 培训内容。

在中小型屏幕上测试布局

  • 通过在小屏幕上测试,验证您的布局能否按比例缩小。在屏幕尺寸缩减时,需要特别讲究可见界面元素,因为其空间有限。
  • 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,以及只通过 AppCompatActivity 和 Material Design 支持库等库 API 提供的功能。
  • 其中的一些亮点包括:
  • 如需了解有关可用支持库的详细信息,请参阅 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 Vitals 确定并修复渲染缓慢和帧冻结等不良行为。
  • 设备可能会停用画中画 (PIP)。在应用使用画中画之前,请务必通过调用 hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE) 进行检查以确保可以使用画中画。
  • 设备上应用的大小应小于 40MB。
  • 在应用的 RAM 使用量中,按比例分摊的内存大小 (PSS) 不应超过 90MB。对于游戏,在游戏的 RAM 使用量中,PSS 量不能超过 150MB。有关 PSS 的详情,请参阅调查 RAM 使用量指南。
  • 应尽可能缩短应用的启动时间,将其控制在 5 秒以内。
  • 在 RAM 低的 Android Go 设备上, SYSTEM_ALERT_WINDOW(可让应用在其他应用上层绘制窗口)可能会处于停用状态。在其他应用上绘制之前,请调用 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。

其他资源

如需详细了解如何支持各种设备,请查看以下资源:

博文