覆盖更多用户意味着支持越来越多的 Android 平台版本和设备规格。为了提升用户体验,请针对常见的 RAM 配置以及屏幕尺寸和分辨率进行优化。
支持多种屏幕尺寸
如果您的应用支持各种尺寸和分辨率的屏幕,则可以为数十亿用户提供更好的用户体验。本部分介绍了几种实现此目的的方法。
使用与密度无关的像素 (dp)
- 使用像素定义布局尺寸效果不佳,因为不同的屏幕具有不同的像素密度,因此相同数量的像素在不同设备上可能对应不同的物理尺寸。
- 为了克服这个问题,Android 支持与密度无关的像素 (dp),它对应于每英寸 160 个点 (mdpi 密度) 下像素的物理尺寸。
- 使用 dp 定义布局可确保用户界面的物理尺寸与设备无关。请访问 Android 指南中的 支持多种屏幕,了解有关使用与密度无关的像素的最佳实践。
在 ldpi 和 mdpi 屏幕密度上测试文本和图形
- 测试以确保您的文本和图形在低密度和中密度 (ldpi 和 mdpi) 屏幕上也能正常工作,因为这些是 常见的密度,尤其是在低成本设备中。注意低密度屏幕上的文本是否不清楚,因为细微的细节在这些屏幕上不可见。
- 密度较低的屏幕的设备往往具有较低的硬件规格。为了确保您的应用在这些设备上也能正常运行,请考虑减少或消除繁重的图形处理负载,例如动画和过渡。
- 如需详细了解如何支持不同的密度,请参阅 Android 培训课程中的 支持不同的密度。
在小屏幕和大屏幕上测试布局
- 通过在较小的屏幕上进行测试,验证您的布局是否可以缩小。随着屏幕尺寸的缩小,请对可见的 UI 元素进行严格筛选,因为它们的可用空间有限。
- Material Design 指南中描述了 指标和基线,以确保您的布局可以在屏幕密度之间进行缩放。
- 如需详细了解如何支持不同的屏幕尺寸,请参阅 Android 培训课程中的 支持不同的屏幕尺寸。
提供向后兼容性
并非所有用户都在使用搭载最新版 Android 平台的设备。以下是一些提高向后兼容性的方法,有助于让您的应用尽可能多地触达用户。
适当地设置 targetSdkVersion
和 minSdkVersion
- 应用应构建并以最新版本的 Android 为目标,以确保它们在各种设备上提供最新的行为;这仍然可以向旧版本提供向后兼容性。以下是在适当时针对 API 级别进行设置的最佳实践
-
targetSdkVersion
应为最新版本的 Android。以最新版本为目标可确保您的应用在运行 Android 的较新版本时继承较新的运行时行为。在更新targetSdkVersion
时,请务必在较新的 Android 版本上测试您的应用,因为它可能会影响应用行为。 -
minSdkVersion
设置最低支持的 Android 版本。设置minSdkVersion
还会导致 Android 构建工具报告平台的旧版本中可能不可用的新 API 的不正确使用情况。通过这样做,您可以防止无意中破坏向后兼容性。
-
- 请查阅 Android 仪表盘、您的应用的 Google Play 开发者控制台 以及目标市场中的行业研究,以根据您的目标用户评估要针对哪些版本的 Android,。
使用 Android 支持库
- 通过使用 Android 支持库,确保您的应用在各个操作系统版本上提供一致的体验。此库提供了 Android 框架 API 的向后兼容版本,以及仅通过库 API 可用的功能,例如
AppCompatActivity
和 Material Design 支持库。 - 一些亮点包括
- v4 和 v7 支持库:许多针对旧版 Android 的框架 API,例如
ViewPager
、ActionBar
、RecyclerView
和Palette
。 - Material Design 支持库:用于支持向您的应用添加 Material Design 组件和模式的 API。
- Multidex 支持库:为方法数超过 65K 的大型应用提供支持。如果您的应用使用了许多库,则可能会发生这种情况。
- v4 和 v7 支持库:许多针对旧版 Android 的框架 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 云消息传递 (FCM) 和
GcmNetworkManager
来避免长时间运行的后台服务,并减少用户设备上的内存压力。
内存使用基准测试
Android Studio 提供内存基准测试和分析工具,使您能够在运行时测量内存使用情况。对应用的内存占用进行基准测试使您能够监控多个版本的应用的内存使用情况。这有助于捕获意外的内存占用增长。使用内存分析器工具执行以下操作
- 找出不良垃圾回收 (GC) 事件模式是否可能导致性能问题。
- 识别意外或不必要地获取或保留分配的对象类型。
- 确定代码中可能存在问题的位置。
有关内存使用基准测试的更多信息,请参阅 使用内存分析器查看堆和分配。
针对运行 Android (Go 版) 的设备进行优化
Android (Go 版) 是一种针对内存容量 ≤1GB 的入门级设备的优化体验,从 Android Oreo (Go 版) 开始。为了确保您的应用在 Android (Go 版) 设备上运行良好,您应考虑以下指南
- targetSdkVersion 应为最新版本的 Android。Android (Go 版) 设备仅运行 Android Oreo (API 27 或更高版本)。
- 应用应在内存容量 ≤1GB 的设备上流畅运行。请记住上面 高效使用内存 中列出的内存优化,并使用 Android 核心指标 来识别和修复不良行为,例如渲染缓慢和冻结帧。
- 画中画 (PIP) 在某些设备上可能被禁用。在您的应用使用 PIP 之前,请通过调用
hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE)
来确保它可用。 - 设备上的应用大小应小于 40MB。
- 应用 RAM 使用量的比例集大小 (PSS) 不应超过 90MB。对于游戏,游戏的 RAM 使用量的 PSS 不应超过 150MB。有关 PSS 的更多信息,请参阅 调查您的 RAM 使用情况 指南。
- 应用的启动时间应尽可能短,并在 5 秒内完成。
-
SYSTEM_ALERT_WINDOW
(允许应用在其他应用之上绘制窗口)在内存容量低的 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。
相关
其他资源
要了解有关支持各种设备的更多信息,请查看以下资源