`
forhope
  • 浏览: 365757 次
  • 性别: Icon_minigender_1
  • 来自: 帝都
社区版块
存档分类
最新评论

Android应用程序设计策略

 
阅读更多

一个成功的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 Google手持设备应用程序设计 电子书 pdf

    《深入浅出 Android Google手持设备应用程序设计》这本书是Android开发者必备的参考资料,它全面而深入地探讨了在Google手持设备上构建应用程序的各种技术和策略。以下将详细解析书中的关键知识点: 1. **Android...

    Android应用框架原理与程序设计(第三版)

    《Android应用框架原理与程序设计(第三版)》是一本深度探讨Android开发核心框架的书籍,旨在帮助开发者深入了解Android系统的运作机制,提升应用程序的设计与实现能力。本书中文高清完整版,阅读体验优秀,适合...

    88个Android应用程序

    这个压缩包包含了88个Android应用程序的源代码样本,这些样本覆盖了各种功能和应用场景,对于Android开发者来说,它们是宝贵的参考资料和学习工具。 1. **手势识别**(GestureRecogniseSample): 手势识别是...

    Android应用框架原理与程序设计(简体中文版)

    《Android应用框架原理与程序设计(简体中文版)》这本书深入探讨了Android应用程序开发的核心——Android应用框架,以及如何利用这些原理进行高效且优化的程序设计。Android应用框架是Android系统的重要组成部分,它...

    Android应用框架原理与程序设计.rar

    《Android应用框架原理与程序设计》是一本深入探讨Android操作系统核心组成部分——应用框架的专业书籍。在Android系统中,应用框架是开发者构建应用程序的基础,它提供了许多API和服务,使得开发者能够轻松实现各种...

    android应用程序 宅男志全集

    《Android应用程序:宅男志全集》是一款专为Android用户设计的应用程序集合,包含了多个版本的宅男志及相关图库应用。这个应用合集显然深受宅文化爱好者的欢迎,其多版本的提供显示了开发者对产品不断更新和完善的...

    Android软件平台架构与应用开发.docx

    #### 15.6 Android应用程序设计策略 为了确保应用程序的质量和用户体验,开发者需要遵循一定的设计策略,例如: - **简洁明了的用户界面**:确保用户界面简单易用。 - **高效的性能**:优化应用程序以提高响应速度...

    提高物联网应用技术专业课程教学效果的探索——以Android物联网程序设计为例.pdf

    本文探讨了提高物联网应用技术专业课程教学效果的方法和策略,旨在解决高职院校 Android 物联网程序设计课程存在的实验教学无法真正开展、教学内容过于章节化、课程与行业应用的关联性较低等问题。文章从六个方面...

    深入浅出Android--Google手持设备应用程序设计(PDF版).rar

    《深入浅出Android--Google手持设备应用程序设计》是一本针对Android开发者的权威指南,它以易懂的语言和实例深入解析了Android系统的核心概念和技术。这本书是PDF格式,适合电子阅读和学习,对于初学者和想要提升...

    AndroidStudio实战快速高效地构建Android应用 AndroidStudio 高清完整带目录书签 PDF AndroidStudio实战

    Android Studio作为Google官方推荐的Android应用程序开发集成开发环境(IDE),其功能强大且不断更新,是每一个Android开发者必备的工具。 本书涵盖了从Android Studio的基础操作到高级特性的全面内容,包括但不...

    Android应用框架原理与程序设计

    然后,它将详细阐述Android应用程序框架的各个组件,如Activity、Service、BroadcastReceiver、ContentProvider和Intent等,这些都是Android应用程序设计中的关键元素。 Activity是用户界面的主要载体,书中会讲解...

    88个经典Android应用程序打包下载

    这个压缩包包含了88个经典Android应用程序的源代码,是学习和研究Android开发不可多得的资源。 首先,我们可以从这些源码中学习到基础的Android组件使用,如Activity、Service、BroadcastReceiver和ContentProvider...

    Android应用程序“计算器”

    总的来说,开发Android应用程序“计算器”不仅涉及编程技术,还包括UI设计、性能优化、测试策略等多个方面。通过合理的布局设计和高效的代码实现,我们可以创造出一个既美观又实用的计算器应用,满足用户在移动设备...

    android手机程序设计

    首先,我们要理解Android应用程序的基础结构。Android应用主要由四大组件构成:Activity(活动)、Service(服务)、BroadcastReceiver(广播接收器)和ContentProvider(内容提供者)。Activity是用户界面的入口,...

    《Android应用程序开发与典型案例》完整版PDF

    《Android应用程序开发与典型案例》是一本深入探讨Android应用开发的专业书籍,它涵盖了从基础到高级的各类主题,旨在帮助开发者全面掌握Android平台上的应用构建技巧。这本书提供了丰富的案例,通过实例解析来阐述...

    《深入浅出Android-Google手持设备应用程序设计.pdf》高清下载

    《深入浅出Android-Google手持设备应用程序设计》是一本专注于Android开发的图书,由gasolin撰写,致力于帮助读者理解和掌握Android手持设备应用的设计与开发。Android,一个由Google主导的开放手机操作系统,已经...

    Android系统结构和SDK使用;Android SDK的开发环境;Android应用程序的概述和框架;Android应用程序示例;Android应用程序的内容;Android的UI系统实现;视图组(ViewGroup)和布局(Layout)的使用

    UI设计是Android应用程序的重要组成部分,涉及到布局设计、控件使用等方面。常见的UI组件包括按钮、文本框、列表等。 **6.2 控件和基本事件的响应** 控件是构成UI的基本单元,它们可以响应用户的触摸、点击等操作...

    android应用程序锁APP源码.zip_android_android应用锁_安卓锁机源码_应用锁_程序锁app源码

    本资源提供的"android应用程序锁APP源码"是一个实现这一功能的实例,可以帮助开发者深入理解如何在Android系统中实现这样的安全机制。 源码分析: 1. **主活动(MainActivity)**:这是应用程序锁的核心部分,通常...

    Android平板电脑应用程序设计交互原则和设计案

    本文将深入探讨Android平板电脑应用程序设计的交互原则,对比iPad的iOS系统与Android 3.x“蜂巢”系统的差异,同时介绍Android的设计模式、布局策略,并分享一些优秀的Android平板电脑应用程序设计案例。 #### 屏幕...

    android应用开发设计模式之-策略模式

    在Android应用开发中,设计模式是一种重要的编程范式,它为解决特定问题提供了标准的解决方案。今天我们将深入探讨其中的一种——策略模式。策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。在Java...

Global site tag (gtag.js) - Google Analytics