一个成功的Android应用程序往往提供一个突出的用户体验。当Android团队构建了一个有着健壮核心的系统后,大多数的用户体验将来源于用户和应用程序之间的的交互。显著的用户体验体现在三个核心特征上,即快速、响应、无缝。当然,每一个平台都曾经有过类似的三种性质。尽管如此,每个平台实现这些特性的方式也有所不同。下面将会简单地介绍在Android平台下面你的应用程序将如何达到这些要求。
(1)快速(Fast)
基于Android平台的设备一定是嵌入式设备,它不仅仅是一部电话,还是一个小型的手持电脑。在编写Android程序时不仅要时刻考虑执行的效率,还要考虑电池的续航能力。一般来说,高效的代码意味着最小的内存占用,意味着紧凑的风格,意味着避免了因为某种语言和编码习惯对性能的影响。
如何判断一个系统的合理性,这里有两个基本的原则:
不要做不是必须要做的事情;
尽可能地节省内存的使用。
(2)响应(Responsive)
在Android中,程序的响应性被活动管理器(Activity Manager)和窗口管理器(Window Manager)这两个系统服务所监视。当出现下列情况时,Android会认为该程序无响应:
5 s内没有响应用户输入事件(如键盘输入);
一个意图接收器执行10 s还没有完成。
在正常情况下,Android程序会完全的在一个单线程里运行。这意味着,任何应用程序的执行在主线程里超过一段时间就会弹出ANR(Application No Response)的对话框,因为应用程序没有机会去处理用户输入和意图广播操作。
因此,任何主线程的方法都不能做很复杂的处理,特别是Activity对象在它的关键生命周期函数里不能处理太多,例如onCreate()和onResume()。那些潜在的需要很长时间运行的操作需要在另外的子线程中完成,例如网络或数据库操作,都是计算量很大的操作,如重新计算Bitmap图形大小(或者在数据库操作时,使用的是异步请求)。虽然如此,但这并不意味着主线程应该阻塞去等待子线程的完成,也不是去调用Thread.wait()或Thread. leep()。相反地,主线程应该提供一个Handler给子线程去返回完成信息。通过这种方式来设计应用程序,会使主线程仍然能够响应输入事件而避免由于5 s无响应而产生ANR对话框。其他的显示用户界面的线程也是同样的道理,它们同样要在相同的时限之内做出响应。
这种在意图接收器(Intent Reciever)上执行的特殊时间限制,强调那些小的少量处理应该按照规矩,例如保存一个设置或者寄存一个通告。因此,在调用主线程其他方法时,应用程序应该避免意图接收器(Intent Receiver)中潜在的长时间运行操作和运算。但是不是通过子线程来解决(因为Intent Receiver的生命周期很短),如果在相应一个特有的广播时段存在潜在的长时间运行的操作,你的应用程序应该开启一个服务(Service)。值得注意的是,你应该避免在一个Intent Receiver上开始一个活动(Activity),因为它将会产生一个新的屏幕去取代用户正在使用的屏幕。如果应用程序在一个意图广播(Intent Broadcast)响应中有什么东西要提示用户,开发者应该使用通知管理
器(Notification Manager)。
一般来说,100~200 ms是用户在应用程序中能够感知到的极限。正如可以采取一些措施避免ANR,也可以采取一些措施增强程序的响应性。
如果应用程序正在后台运行并响应用户输入,说明进程正在创建,进度条(Progress Bar)和进度对话框(Progress Dialog)在这里很有作用。
如果是游戏编程,应该在一个子线程里做位移运算。
如果应用程序有一个比较耗时的初始化过程,可以考虑显示一个开场动画或者尽可能快地显示主窗口然后异步的填充其他的部分。
以上其中任意一种方法,都可以让用户感觉不到应用程序的停止。
(3)无缝性(Seamless)
系统设计将多个应用程序视为一种松耦合组件的联合。开发者在设计程序与程序或程序与系统之间交互时,需要完整地封装,无缝地和其他应用程序结合,设计高质量的应用程序。
不要丢失数据。
在开发应用程序时,始终应该考虑到Android是一个移动的平台。任何Activity(如有人给你打电话)在运行自己Activity时都有可能会突然弹出来,这将会调用onSaveInstanceState() 和onPause()方法,很有可能终止当前进程。
如果用户正在编辑数据时,其他的Activity出现了,当前程序可能因为被终止而丢失一些数据。当然如果事先保存了数据就不会丢失。Android的编程思路也是这样:那些接收或编辑输入的Android程序应该重载onSaveInstanceState()方法,把程序的当前状态保存下来。当第二次访问该程序时,就会恢复数据。
一个使用这的经典例子就是邮件程序。如果用户正在编辑一个信件,这时外面一个Activity出现了,那么程序应该自动的把当前邮件保存到草稿本中。
使用内容提供器(Content Provider)保护原始数据。
Android处理数据的方法是:创建一个内容提供器(Content Provider),通过一个深思熟虑的可维护的API把程序数据提供给其他的应用程序。使用一个内容提供器就好像嵌入了一个Java的接口到两片代码之间,让它们能够相互交流。这意味着,你可以改变你内部的形式而不用修改Content Provider暴露的接口,并且这不会影响应用程序的执行。
不要打断正在说话的用户。
如果用户正在运行一个程序(如正在打电话),他肯定不想受到其他程序干扰,除了需要从当前Activity获得用户输入的Activity外。这就是说,不要从运行在后台的意图接收器(Intent Receiver)或服务(Service)中调用startActivity(),这样做会打断任何当前运行的应用程序,就会使用户很不舒服。这样的活动(Activity)变成了一个'键盘强盗',它会把一些用户原本准备给前一个活动(Activity)的输入截取过来。
Android平台没有直接从后台运行活动(Activity),而是使用通知管理器(Notification Anager)去设置通知消息。这将会在状态栏中显示,用户有空时就会单击它,看看程序需要什么东西。
分享到:
相关推荐
基于Android重打包的应用程序安全策略加固系统设计.pdf
算术练习应用一个随机生成算术问题的Android应用程序。特征生成可变长度的加,减,乘和除问题。 答案是逐位评估的,不正确的数字以红色显示。安装将独立的APK到您的手机上。 导航到“设置”->“安全性”,以启用来自...
4.3 Android应用程序结构剖析 17 4.4 系统功能结构图 23 第5章 系统的实现 25 5.1 软件界面设计 25 5.2 信息展示界面 25 5.3 新闻展示情模块界面 26 5.4 新闻发布模块界面 27 5.5交流互动模块实现界面 28 5.6 夜间...
4.3 Android应用程序结构剖析 17 4.4 系统功能结构图 23 第5章 系统的实现 25 5.1 软件界面设计 25 5.2 信息展示界面 25 5.3商品展示界面 26 5.4专利展示界面 27 5.5个人信息界面 28 第6章 系统的测试 30 6.1 测试...
为适应其作为移动平台操作系统的特殊需要,谷歌对其做了特别的设计与优化,使应用程序关闭但不退出,并由操作系统进行进程的回收管理。本文在 Application Framework 与 Linux 内核两个层次上,以进程为粒度,对 ...
本书专门介绍Android源代码的设计模式,共26章,主要讲解面向对象的六大原则、主流的设计模式以及MVC和MVP模式。主要内容为:优化代码的首步、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特原则、...
优化代码的首步、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特原则、单例模式、Builder模式、原型模式、工厂方法模式、抽象工厂模式、策略模式、状态模式、责任链模式、解释器模式、命令模式、观察...
本书专门介绍Android源代码的设计模式,主要讲解面向对象的六大原则、主流的设计模式以及MVC和MVP模式。本书的主要内容为:优化代码的第一步、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特原则、...
本书专门介绍Android源代码的设计模式,共26章,主要讲解面向对象的六大原则、主流的设计模式以及MVC和MVP模式。主要内容为:优化代码的首步、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特原则、...
此应用程序的主要重点是解决与Android本机开发相关的开发策略,例如重要概念,例如参与度,用户体验以及在开发具有质量和成熟度的应用程序的生命周期中采用的良好做法。 用户体验 UX (用户体验)是一个关于用户在...
4.3 Android应用程序结构剖析 18 4.4 系统功能结构图 24 4.5 系统流程图设计 25 第5章 系统的实现 26 5.1 软件界面设计 26 5.2 信息展示界面 26 5.5家人管理界面 29 5.6消费统计界面 30 第6章 系统的测试 32 6.1 ...
String strContent="是一种可以撰写跨平台应用软件的面向对象的程序设计语言," + "是由Sun Microsystems公司于1995年5月推出的Java程序设计语言和Java平台" + "(即JavaSE, JavaEE, JavaME)的总称。"; @...
4.3 Android应用程序结构剖析 18 4.4 系统功能结构图 24 第5章 系统的实现 26 5.1 软件界面设计 26 5.2 信息展示界面 26 5.3监测界面 27 5.4监测提醒界面 28 第6章 系统的测试 30 6.1 测试方案设计 30 6.1.1 测试...
4.3 Android应用程序结构剖析 18 4.4 系统功能结构图 24 4.5 系统流程图设计 24 第5章 系统的实现 26 5.1 软件界面设计 26 5.2 信息展示界面 26 5.3 考勤管理模块界面 27 5.4 车位管理模块界面 28 5.5购物管理模块...
4.3 Android应用程序结构剖析 18 4.4 系统功能结构图 24 4.5 系统流程图设计 24 第5章 系统的实现 26 5.1 软件界面设计 26 5.2 信息展示界面 26 5.3 收入支出记录模块界面 27 5.4 统计查看模块界面 28 5.5留言模块...
4.3 Android应用程序结构剖析 18 4.4 系统功能结构图 24 4.5 系统流程图设计 25 第5章 系统的实现 26 5.1 软件界面设计 26 5.2 信息展示界面 26 5.3位置查看模块 27 5.4定位追踪界面 28 5.5路线查询 29 5.6天气查询...
CrawlDroid是用于Android应用程序GUI测试的工具集。 它设计了一种新颖的基于反馈的探索策略,以减少测试时间,并利用手动编码的测试来挖掘有关应用程序的某些领域知识,以提高代码覆盖率。 为了评估该技术的有效性,...
4.3 Android应用程序结构剖析 18 4.4 系统功能结构图 24 第5章 系统的实现 26 5.1 软件界面设计 26 5.2 信息展示界面 26 5.3监测界面 27 5.4监测提醒界面 28 第6章 系统的测试 30 6.1 测试方案设计 30 6.1.1 测试...
4.3 Android应用程序结构剖析 18 4.4 系统功能结构图 24 第5章 系统的实现 24 5.1 软件界面设计 24 5.2 主界面 25 5.3 背单词界面 25 5.4 单词复习界面 25 5.4 单词浏览界面 25 5.5 用户中心界面 26 第6章 系统的...