通过收藏保持井井有条 根据您的偏好保存内容并进行分类。

支持多种屏幕尺寸

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

使用密度无关像素 (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 Support 库

使用 Android 支持库,确保您的应用在各个 OS 版本中提供一致的体验。该库提供向后兼容的 Android 框架 API 版本,以及仅通过库 API 提供的功能,例如 AppCompatActivity 和 Material Design Support Library。

  • 一些亮点包括
  • v4 和 v7 支持库:为旧版本 Android 提供了许多框架 API,例如 ViewPagerActionBarRecyclerViewPalette
    • Material Design 支持库:支持将 Material Design 组件和模式添加到您的应用中的 API。
    • Multidex 支持库:为拥有超过 65K 方法的大型应用提供支持。如果您的应用使用许多库,可能会发生这种情况。
    • 有关可用支持库的更多信息,请参阅 Android 开发者网站的 支持库功能 部分。
  • 使用 Google Play 服务

Google Play 服务提供了独立于 Android 平台版本的最佳 Google API。考虑使用 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 提供内存基准测试和性能分析工具,使您能够在运行时测量内存使用情况。对应用的内存占用进行基准测试,可让您监控应用多个版本的内存使用情况。这有助于发现无意的内存占用增长。使用 Memory Profiler 工具执行以下操作

找出是否存在可能导致性能问题的非理想垃圾回收 (GC) 事件模式。

  • 识别意外或不必要分配或保留分配的对象类型。
  • 找出代码中可能存在问题的位置。
  • 有关基准测试内存使用情况的更多信息,请参阅 使用 Memory Profiler 查看堆和分配

为运行 Android (Go edition) 的设备进行优化

Android (Go edition) 是针对内存 ≤1GB 的入门级设备的优化体验,始于 Android Oreo (Go edition)。为了确保您的应用在 Android (Go edition) 设备上运行良好,您应该考虑以下准则

targetSdkVersion 应设置为最新版 Android。Android (Go edition) 设备仅运行 Android Oreo(API 27 或更高版本)。

  • 应用应在内存 ≤1GB 的设备上流畅运行。请记住上面 高效使用内存 中列出的内存优化,并使用 Android Vitals 来识别和修复缓慢渲染和冻帧等不良行为。
  • 设备上可能禁用画中画 (PIP)。在使用 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 edition) 设备上可用,因为让您的应用运行更快、更轻巧将使您的所有用户受益。您可以使用 Play 管理中心上的多个 APK 功能来为 Android (Go edition) 设备分发特定的 APK,但前提是这样做不会损害用户体验(例如,您应避免移除功能)。面向 Android (Go edition) 设备的 APK 需要声明 <uses-feature android:name="android.hardware.ram.low" android:required="true">,目标 API 级别至少为 26,并且版本代码高于非 Go edition APK。

注意:如果您正在设计一个全新的应用,具有全新的体验和不同的功能集,您可能会决定推出一个针对 Android (Go edition) 的特定应用,带有独特的应用包。这也会在 Play 商店中有一个独特的列表,包含自己的评分和安装次数,这可能会让 Play 商店上的用户感到困惑。对于大多数开发者而言,我们建议使用多个 APK 来定位 Android (Go edition) 设备,而不是创建两个完全独立的独立应用。

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

博客文章

要让应用具有无障碍性,请使其与不同的设备兼容