Save the date! Android Dev Summit is coming to Sunnyvale, CA on Oct 23-24, 2019.

数十亿用户的设备能力

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

支持多种屏幕尺寸

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

使用密度无关像素 (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 版本。使用 Android 4.0(API 级别 14:Ice Cream Sandwich)或 Android 4.1(API 级别 16:Jelly Bean)- 这些版本可最大程度地覆盖现代设备。设置 minSdkVersion 还会使 Android 构建工具报告旧版本平台上可能并未提供的新 API 的不正确使用情况。这样一来,便可防止您无意中破坏向后兼容性。
  • 查阅您的应用的 Android 信息中心Google Play Developer Console 以及对您的目标市场的行业调查,从而根据您的目标用户来衡量需要将哪些版本的 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 Manager 传递新版本的客户端库。

高效利用内存

内存是改善用户体验的“幕后英雄”。良好的内存管理可让您的应用更稳定,性能更好;在某些情况下,高效利用内存可能是让您的应用完全发挥作用的唯一方式。下面介绍一些帮助您的应用合理使用内存的方式。

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

  • 动态调整内存占用可确保兼容内存配置不同的设备。
  • isLowRamDevice()getMemoryClass() 等方法有助于确定运行时内存约束。您可以根据这些信息按比例减少内存使用量。例如,您可以在低内存设备上使用低分辨率图像。
  • 如需了解有关管理应用内存的详细信息,请参阅有关管理应用内存的 Android 培训。

避免长时间运行的进程

  • 长时间运行的进程常驻在内存中,会使设备运行速度减慢。在大多数情况下,您的应用应在发生给定事件时唤醒,处理数据,然后关闭。您应该利用 Firebase 云消息传递 (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 26 或更高版本)。
  • 应用应在内存不超过 1GB 的设备上流畅运行。记住上文高效利用内存中列出的内存优化方式,同时使用 Android Vitals 确定并修复渲染缓慢和帧冻结等不良行为。
  • 可在低内存设备上停用画中画 (PIP)。在您的应用使用 PIP 之前,先通过调用 hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE) 进行检查,以确保此功能可用。
  • 设备上应用的大小应小于 40MB。
  • 在应用的内存使用量中,按比例分配占用内存 (PSS) 量不能超过 50MB。对于游戏,在游戏的内存使用量中,PSS 量不能超过 150MB。如需了解有关 PSS 的详细信息,请参阅调查内存使用情况指南。
  • 应尽可能缩短应用的启动时间,将其控制在 5 秒以内。

建议大多数开发者优化其要用于所有 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。