Advertisement
  1. Code
  2. Android SDK
Code

为了安卓流畅的体验,六大做与不做

by
Length:LongLanguages:

Chinese (Simplified) (中文(简体)) translation by Zhang Xiang Liang (you can also view the original English article)

流行的Android APP有一些共同之处:它们都提供了流畅的用户体验。在这篇文章中,我将分享帮助你的APP脱颖而出的技巧。

不考虑你的APP类型和受众目标,流畅的体验可以帮助你确保APP更成功。在这篇文章中,我将分享六大做与不做,以确保你的APP能够为用户提供最佳体验。

由于创建和启动Android APP是一个多步骤的过程,所以会设计到Android开发生命周期的每一个环节 - 从艰难的选择Android APP支持的版本,创建一个吸引全球用户的产品,直到分析APP发布后的性能。

1.不必支持Android的每一个版本

尽管希望APP尽可能多地吸引用户,但不要认为支持更多版本的Android是最佳方法。

吸引大量用户的关键是提供最好的用户体验,你要知道尽可能支持尽多的Android版本可能会损害整体的用户体验。

主要的问题是,随着你持续跟踪Android发布的历史版本,你的APP兼容早期的版本会越来越困难。

有时候,你的APP会与早期版本的Android不兼容。例如,如果你的APP需要访问低功耗蓝牙(BLE),那么你的APP无法在Android 4.3之前的任何版本上运行, 因为Android 4.3才添加支持BLE。

但是,有时不知道到底兼容还是不兼容,你可能会发现自己挣扎是否修改甚至删除非关键功能以便适配特定版本的Android。小小的妥协会降低用户体验的质量,而你认为对用户没什么影响。

另外,为每个不同版本的Android定制,优化和测试你的APP需要时间和精力,因此你还需要问问自己,这是否值得。 一般,通过支持每个版本的Android,你可以获得多少用户?你可以通过查看Google信息中心的统计信息,了解Android平台每个版本的Android设备数量。

最终,没有绝对正确或错误的答案,所以你需要权衡利弊,决定什么对你自己的项目是最有意义的。

一旦你决定要支持哪些Android版本,请将此信息添加到module级的build.gradle文件,使用minSdkVersion(APP兼容的最低API),targetSdkVersion(你测试过的APP兼容的最高API),以及compileSdkVersion(Gradle用于编译APP的Android SDK的版本)。

为了确保你的APP受益于最新的Android功能并与早期版本兼容,建议设置minSdkValue的值尽可能低,targetSdkVersioncompileSdkVersion的值尽可能最新。

2.为多个屏幕尺寸设计

当你使用Android APP时,将花费大部分时间在自己的Android智能手机或平板电脑上进行测试。特别是在APP开发的早期阶段,创建多个Android虚拟设备(AVD)可能是你头脑中的最后一件事。

但是,不要忽视大的屏幕尺寸!在你设计的屏幕上,你可能很容易认为你的APP看起来很棒,并且能够在各种Android设备上正常运行。

Android系统将自动缩放你的布局,图片和其他资源,以便将它们以适合的尺寸显示在当前屏幕上,但为了获得最佳的用户体验,你应该给用户你为这个特定设备设计了你的APP的错觉。 自动缩放就给了用户这个错觉!

为了确保你的APP能够在各种设备上提供最佳的用户体验,你需要提供针对不同设备进行优化的替代资源,例如针对Android一般密度的图片,以及针对横屏模式的可选布局。

创建可选资源后,你还需要创建标有合适配置限定符的替代目录,然后将资源放在这些目录中,例如,res / layout-land目录包含专为横屏模式设计的布局。 然后,Android系统将在运行时自动加载与当前屏幕配置最匹配的资源。

虽然大多数配置限定符相对简单,但提供针对不同屏幕尺寸的资源会更复杂一些,需要你指定系统应该使用此资源的确切dpi值。所以,你需要告诉系统,“ 当我的APP显示在具有800dpi或更多屏幕宽度的设备上时,我想使用此布局“。

你可以通过在各种各样不同的AVDs上测试APP来获取这些值,并记录所有的屏幕尺寸,让你的默认资源努力达到这些值 - 例如,也许一旦设备低于某些dpi阈值你的默认布局开始看起来混乱。

你可以在项目中使用下面三个屏幕尺寸配置限定符:

  • minimumWidth sw dp。允许你在系统使用此目录中的资源之前指定必须可用的最小水平空间。 例如,如果你有一组需要800dpi或更多的布局,则可以创建一个res / layout-sw800dp目录。 请注意,设备smallestWidth是固定值,当用户在纵向和横向之间切换设备时,该值不会改变。

  • 可用屏幕宽度w <value> dp。系统可以使用这些资源之前必须具有的最小水平空间。当用户在纵向和横向模式之间切换时,设备的w<value>dp值会改变。

  • 可用屏幕高度:h< value >dp。 在系统可以使用这些资源之前必须可用的最小高度。设备的h< value >dp值将根据用户是用横向还是纵向而改变。

适配多个屏幕尺寸就是创建项目资源的可选版本并将其添加到相应的目录中 - 然后冲洗并重复。但是,创建这些替代资源时,你可以使用一些额外的技巧,这些资源真的可以帮助你给用户那种专门为此设计的错觉:

  • 使用density-specific的图片与9-patch图片组合。如果系统需要调整图片大小以适合当前屏幕,那么默认情况下,它将调整整个图片的大小,这可能会导致模糊,像素化或其他奇怪的图片。为了获得最佳效果,如果需要调整图片的大小,你应该指定系统应该复制的确切像素,做法是将项目的图片作为9-patch图片提供。 提供每个图片的多个9-patch版本,其中每个9-patch图片针对不同的屏幕密度,然后系统将加载最适合当前屏幕密度的9-patch图片,并拉伸9-patch图片的“可拉伸'部分。 你可以使用任何PNG编辑器创建9-patch图片,或者使用Android SDK的编辑器(在sdk/tools/Draw9patch.bat)。

  • 创建多个dimension.xml文件。建议你在单独的dimens.xml文件中定义布局的值,而不是将其硬编码到项目中。 但是,更进一步,你可以创建多个dimension.xml文件来适配不同的屏幕大小和密度。 例如,你可以创建一个values-ldpi/dimens.xml文件,当APP安装在“低”密度类别的设备上时应使用里面的值。 然后,系统将加载当前设备的相应尺寸,并将其应用于你的布局。

  • 考虑使用fragments。fragments为您提供了将单个Activity分为单独组件的方式,然后你可以以不同的方式显示,具体取决于当前的屏幕配置。 例如,当你的APP安装在具有较大屏幕的设备上时,你可以选择在多窗格布局中并排显示多个fragments,以及在空间受限时单独的Activity显示。 将fragments添加到布局的最简单的方法是将<fragment>元素插入到布局资源文件中。 或者,你可以在APP代码将fragments添加到布局中 - 此方法可能更复杂,但它可以在运行时添加,删除或替换fragments。

3.考虑支持不同的语言

Android是一个全球操作系统,所以如果你的APP将为全球用户提供最佳的用户体验,那么你应该考虑将APP本地化为不同的语言和不同区域。

通常,本地化APP的最大部分是将项目的strings.xml文件转换为你要支持的不同语言。除非你能流利的使用目标语言,否则你将需要翻译的帮助。 如果你没有任何想法,那么开发者控制台的Google Play应用翻译服务可以帮到你。

Youll find a Purchase Translations option in the Google Play Developer Console

一旦选择了一个翻译者,你应该在进行翻译之前,先看一下你的strings.xml 文件。检查拼写错误和语法错误等问题,并确保strings.xml已经格式化,使其易于阅读,同时请记住,给你翻译的人可能不是Android开发人员本身。

你还应该提供尽可能多的上下文,因此请确保为每个字符串添加注释,说明此字符串的用途,何时出现在APP中以及翻译者需要注意的任何限制。例如,如果一个字符串需要保持在10个字符长的长度以适应其在布局中的分配空间,那么这就是翻译者需要注意的事情!

一旦翻译者返回翻译后的strings.xml文件,你需要为每个替代文件创建一个目录,这意味着你需要找出要使用的配置限定词。

本地配置限定符由ISO代码和一个可选的国家或地区代码组成,前者是一个语言代码,后者的前面是一个小写的r。例如,如果你想Canada(can)的人员提供French(fr)文本,那么你要创建一个res / values-fr-rcan目录。  

如果你提供了本地化的文本,请记住在翻译过程中,某些字符串可能会明显扩大或缩小,因此你需要测试你的布局是否可以适应不同长度的字符串。

测试本地化资源的最简单方法是在AVD上安装APP,然后模拟不同的位置和语言。此时,系统将加载你的资源的本地化版本并将其显示在APP中。

你可以通过以下Android Debug Bridge(adb)命令来更改正在运行的AVD中的区域:

和:

请注意,测试时替换fr-CAN

如果你以最佳实践设计了APP,那么你的布局应该足够灵活以显示大部分的本地化字符串。但是,如果你的字符串的长度变化很大,那么你可能需要提供针对不同区域进行优化的备用布局。

虽然你项目的strings.xml文件通常是需要本地化的主要资源,你还应该考虑是否还有其他可能需要翻译的资源,例如包含文本的图片,视频或音频,或任何不适合该区域的资源。

一旦你确定已经提供了所有必要的本地化资源,并且已经进行了自己的一轮测试,那么你应该考虑在每个目标区域设置一个母语的beta测试。母语者经常可以发现翻译人员可能忽视的错误,也可能会提供一些建议,告诉你如何让你的APP更具吸引力。 可以通过Google Play开发者控制台安排此类有针对性的测试版。

当你终于准备好启APP时,请花点时间来创建APP的Google Play页面的本地化版本,因为这将立即使你的应用对浏览Google Play商店的国际用户更有吸引力。 你还应尝试并提供明确显示APP中本地化文本的屏幕截图,因此用户才不会怀疑你是否刚刚翻译了APP的Google Play页面,而不是APP中的实际文本。

一旦你启动了APP,辛苦的工作就不会结束!一旦你吸引了国际用户,你将需要通过多种语言的持续支持来吸引起他们 - 即使使用像Google翻译这样的机器翻译者。 至少,你应该关注Google Play评论,查看某些区域设置中的用户是否报告类似的问题,这可能表示你的一个或多个应用的本地化资源有问题。

4.不要忘了Accessibility!

作为应用开发人员,需要确保每个人都能享受你的APP,所以考虑没有声音,颜色或其他视觉效果的用户如何访问你的APP,或任何通过Accessibility与Android设备沟通的人。

Android有Accessibility,因此它具有许多内置的辅助功能,你可以利用它们而无需对APP的代码进行任何根本的更改。

我们来看看你可以对项目进行的一些微小的调整,这将对APP的可访问性产生巨大的影响:

考虑提供额外的内容说明

Accessibility服务(如TalkBack)大声阅读屏幕文字,帮助有视力问题的用户与Android设备进行交互。  

在设计Android应用时,应该考虑用户只需使用屏幕上的文字即可轻松导航APP。如果你需要提供一些其他上下文,那么你可以将内容描述添加到任何APP的UI组件中,然后通过TalkBack等服务朗读。 要添加内容描述,打开项目的布局资源文件,向所需的UI组件添加一个android:contentDescription属性,然后添加内容描述。

支持焦点导航

视力有限或手动灵敏度有限的用户可能会发现使用方向控制器(如触控板,D-pad或键盘)或模拟定向控制器的软件更容易与设备进行交互。为了确保你的APP支持这种对焦导航,你需要将android:focusable="true”属性添加到每个APP的导航组件。

当用户使用方向控件导航APP时,焦点将通过算法自动确定从一个UI元素到另一个UI元素的顺序。但是,你可以通过将以下XML属性添加到任何UI组件来覆盖这些默认值并指定哪个UI组件应该获得焦点:android:nextFocusUpandroid:nextFocusDownandroid:nextFocusLeftandroid:nextFocusRight。 例如:

可调整文本大小

具有视力障碍的用户可能会选择增加其设备上的字体大小。为了确保你的APP中支持字体更改,请以比例像素定义文本,不要忘记测试Android的各种字体大小对APP UI的影响,在需要的情况下对APP进行一些布局调整。

使用推荐的触摸目标尺寸

为了帮助手不够灵巧的人导航APP,建议你将所有触控目标设置为48 x 48 dpi或更高,并确保这些目标之间的空间至少为8 dpi。

考虑禁用超时控制

某些UI组件可能会在一段时间过后自动消失 - 例如,一旦视频播放了一段时间,视频播放控件就会消失。 

问题是如Talkback之类的accessibility服务不会读取控件,除非用户去控制,所以如果超时控制在用户关注之前消失,那么他们不会意识到这些控制存在。 因此,启用accessibility服务时,应考虑将超时控制升级为永久控制。

5.测试APP性能

APP在测试期间没有崩溃或发生任何错误并不意味着它性能很好,因为一些性能问题可能会在常规测试过程中难以发现。没有人喜欢使用永远加载的APP,只要你尝试与其进行交互,就会拖累可用内存,因此应该在发布出去之前始终测试APP性能。

Android SDK附带了各种工具用于专门测试APP性能。在本节中,我们看一下你一定要使用的一些; 然而,还有更多的值得研究(在官方Android文档中找到更多信息)。

请注意,所有这些工具只能与正在运行的APP通信,因此你需要确保要测试的APP安装在AVD或物理设备上。

在开始之前,值得注意的是,如果你确定了APP的性能问题,建议在尝试解决此问题之前对代码进行处理。可以在解决问题后再次重新编写代码,你将能够准确知道你的更改对APP性能的影响。

你可以使用TraceView(通过选择Android设备监视器的DDMS选项卡,然后选择要配置的设备和进程)访问代码来对代码进行定时,并点击Start Method Profiling图标(光标位于以下截图的位置)。

In the Android Device Monitor select the DDMS tab followed by Start Method Profiling

此时,你可以选择基于Trace的分析(跟踪每个方法的输入和退出)或基于Sample的分析(以你指定的频率收集调用堆栈)。 完成选择后,花一些时间与APP进行互动。当准备好查看结果时,可以通过单击Stop Method Profiling图标将跟踪文件加载到查看器中。 跟踪文件将每个线程的执行显示为单独的行,因此可以准确了解项目每个部分运行的时间。

识别过度绘制

当系统绘制APP的UI时,它从最高级别的容器开始,然后通过视图层次结构工作,可能会在称为过度绘制的过程中相互绘制视图。虽然一定量的过度绘制是不可避免的,但可以通过识别和删除任何过度或不必要的绘制来减少APP绘制的时间。

如果你的设备运行的是Android 4.2或更高版本,则可以通过选择Settings > Developer Options > Debug GPU Overdraw > Select overdraw areas来检查在该设备上安装的任何APP中过度显示的数量。然后,系统将向屏幕的每个区域添加彩色叠加,指示每个像素绘制的次数:

  • 没有颜色. 这个像素被画了一次。

  • 蓝色。1x的超额 这些像素被画成两次。

  • 绿色。超过2x。

  • 浅红。超过3x。

  • 深红。超过4x或更多。

大多数APP包含某些级别的过度绘制,但如果在APP中发现大量的过度绘制,那么你应该看看是否有方法减少每个像素被重新绘制的次数,并且有效的方法之一是删除不必要的视图。

Android设备监视器的Hierarchy Viewer提供了对APP整个视图层次结构的高级概述,可以帮助识别用户在屏幕上看到没有用的视图。 

要启动Hierarchy Viewer,请单击Android设备监视器的Hierarchy Viewer按钮,然后选择要检查的设备和Activity,然后选择蓝色图标将Hierarchy Viewer加载到树状视图中。  

In the Android Device Monitor select the Hierarchy View button followed by Load the view hierarchy into the tree view

你可能还需要将Hierarchy Viewer的结果导出为Photoshop文档。这是一种特别有效的技术,用于识别对用户界面无用的视图,因为每个视图都显示为单独的Photoshop图层,这意味着可以隐藏和显示每个图层,并确切了解这将最终影响用户在屏幕上看到的图像。

要创建一个PSD文档,只需点击Capture the window layers as a Photoshop document 图标。

发现内存泄漏

垃圾收集(GC)是一种常见的系统行为,对于确保APP和设备运行的顺利进行至关重要。

但是,如果APP没有正确管理内存,也许是在短时间内泄漏内存或分配大量对象,那么可能会触发更频繁的GC事件,这些事件也会运行更长时间。你可以在Android Studio窗口中查看APP中正在发生什么GC事件?打开窗口底部的“ Android Monitor”选项卡,然后打开“ Monitor”选项卡。 然后,内存监视器工具将自动开始记录APP的内存使用情况。

Select the Android Monitor tab towards the bottom of the main Android Studio window followed by the Monitors tab

如果你继续与APP进行交互,则最终会看到分配的内存量突然下降,表明GC事件已发生。重复此过程,确保点击APP的不同区域,并查看它对GC事件的影响。 如果发现任何奇怪的GC行为,那么你将进一步调查,因为这可能表明APP使用内存的方式有问题。

有几种工具可用于收集有关APP内存使用情况的更多信息。首先,可以使用Android设备监视器的Heap选项卡来查看每个进程使用的堆内存量,这将标记任何正在吞噬可用内存的进程。

要使用堆工具,请选择Android设备监视器的DDMS选项卡,然后选择要检查的进程,然后单击更新堆按钮。在GC事件发生之后,“ ”选项卡不会显示任何数据,但是如果感到不耐烦,则可以通过单击“ Cause GC”按钮来触发GC事件。

Open the Heap tool by selecting DDMS Heap

另一个可以帮助收集有关APP内存使用情况的信息的工具是分配跟踪器Allocation Tracker,可让你准确了解APP分配给内存的对象。要使用分配跟踪器Allocation Tracker,请选择Android设备监视器的DDMS选项卡,然后选择分配跟踪器和要检查的过程。

点击开始跟踪按钮,花费一些时间与应用程序进行交互,特别是你怀疑可能导致APP内存管理问题的部分。要查看分配跟踪器在采样期间收集的所有数据,请选择“ 开始跟踪”按钮,然后选择“ Get Allocations”按钮。

6.使用分析工具

了解用户是创建成功APP的关键。

访问受众用户的数据以及他们如何使用APP的数据意味着你可以对如何构建成功的APP做出更明智的决策,并改进APP运行不佳的领域。

收集这种用户数据使你能够识别用户不同部分的趋势特别有用。例如,你可能会认为某些特定细分受众用户特别有价值 - 也许他们正在占用应用内购买量的最大百分比,或者使用你的应用的时间高于平均水平的时间。 掌握这些信息,你可以采取额外的步骤来支持这些用户,确保你最有价值的用户仍然与你的APP保持联系。  

与此同时,你可能会发现APP正在努力的区域。例如,也许运行特定版本Android的用户具有相当低的参与率,或者更有可能卸载APP。 在这种情况下,你可能需要在此特定版本的Android上测试APP,以查看是否存在可能破坏用户体验的错误或任何其他错误。

基本上,你可以收集关于你的用户及其行为的更多数据,保持已有用户,吸引新用户,并为接触APP的所有人提供全面的体验。

在本节中,我将介绍两种服务,可以轻松获取大量信息:Firebase Analytics和Google Play开发者控制台。

Firebase

你可以使用Firebase Analytics收集用户的数据,例如年龄,性别和位置,以及超过500个应用内事件的信息。如果需要,甚至可以自定义事件。

要将Firebase Analytics添加到项目中,需要使用Google Play服务10.0.1或更高版本以及Google Repository 26或更高版本,因此请打开SDK Manager,并确保这些组件是最新的。你还需要运行Android Studio 1.5或更高版本,并注册一个  免费的Firebase帐户

如果运行的是Android 2.2或更高版本,那么可以使用Firebase Assistant将APP连接到Firebase Analytics。打开Android Studio,启动相关项目,并且:

  • 从Android Studio工具栏中选择“ 工具”>“Firebase ”。

Launch the Firebase Assistant by selecting Tools from the Android Studio toolbar followed by Firebase

  • 点击展开“ Google Analytics(分析)”部分,然后点击Log an Analytics事件

  • 单击连接到Firebase按钮。

  • 在出现的对话框中,选择创建一个新的Firebase项目。

  • 单击连接到Firebase按钮。

  • 过一会,你会看到一个已连接的消息。

  • 点击Add analytics to your app按钮。

  • 在随后的对话框中,单击接受更改

就是这样!你现在可以通过登录Firebase Console,选择要检查的项目,然后选择Google Analytics(分析)来查看所有Firebase Analytics数据。此数据将在一天内定期更新。

开发者控制台

你还可以通过开发者控制台洞察APP的性能和用户行为。

要查看此数据,请登录您的开发者控制台帐户,选择要检查的APP,然后从左侧菜单中选择Dashboard

开发者控制台包含大量有用的信息,因此请仔细阅读其各个部分。但是,有一些可能特别有意义的领域:

  • 用户获取性能。本节包含用户如何查找APP的Google Play列表的细目,例如通过UTM标记的链接,AdWords广告或简单地通过浏览找到你应用的人数,登录在你的页面上的用户的百分比。

  • 财务。如果你已实施营利策略(例如应用内商品或订阅选项),则可以使用开发者控制台来查看应用的财务业绩。在财务部分包含很多信息,如每个付费用户在你APP投资的平均量,收入多少是由你APP所提供的产品所产生的,用户群的每个部分是消费了多少是基于以下因素的:他们的地理位置,年龄和他们正在使用的Android版本。

  • 崩溃和ANRs。本节包含用户提交的APP崩溃和APP无响应(ANR)错误的所有数据,让你有机会识别和修复APP中可能发生的任何问题,然后用户开始将你的评论留在Google Play。 请注意,用户未报告的崩溃不会显示在开发者控制台中。

你也可以考虑下载Google Play开发者控制台APP,让随时随地查看所有这些资讯。

结论

在这篇文章中,我们研究了开发Android APP时的六大该做与不该做。设计好用户体验的黄金规则是什么?在下面发表评论,让我们知道。

与此同时,请查看我们的其他课程和Android编程教程!

Envato qr branded
关注我们的公众号
Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.