`
yangguangfu
  • 浏览: 1536901 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Android最佳实践 为无缝设计

阅读更多

即使你的应用是快速且响应灵敏的,一些设计仍然能句对用户造成问题——因为与其它应用未计划的交互或者对话,意外的数据丢失,无意识的阻塞等等。为了避免 这些问题,有助于理解你的应用运行的环境和可以影响你的应用的系统交互。总之,你应该倔尽全力地开发一个与系统和其它应用无缝交互的应用。
一个常 见的无缝问题就是一个应用的后台进程(如service或broadcast receiver)对某事件作出响应而弹出对话框,这看起来仿佛并无大碍,特别是当你在模拟器上单独地构建和测试你的应用时。然而,当你的应用在真正的设 备上运行,后台线程显示对话框时,你的应用当时可能没有获得用户焦点。这就会出现你的应用会在活动的应用后面显示对话框,或者从当前应用中获得焦点并显示 对话框的情况,而管论当时用户正在做什么(如正在打电话等)。那样的行为可能对你的应用或用户不起作用。
为了避免这些问题,你的应用应该利用适当的系统资源——Notification类,来通知用户。利用通知,你的应用可以通过在状态条上显示一个图标来通知用户事件已经发生,而非获得焦点和打断用户。
另 外一个无缝问题的例子就是,Activity由于未能正确实现onPause()及其它生命周期方法而无意中丢失了状态或用户数据。又或者,你的应用要暴 露供其它应用使用的数据,你应该通过ContentProvider来实现,而非通过一个全世界都可读的原始文件或数据库。
这些例子的共同特点就 是,它们都是关于如何跟系统和其它应用协作得更好,Android系统的设计就是将所有的应用看作是一个松散耦合的组件联邦,不是一堆墨盒代码。这就使你 作为一个开发者可以将整个系统视为只是一个更大一点的组件联邦。这样有得于你将应用与其它应用清晰和无缝的集成,所以作为回报,你应该更好的设计你的代 码。
这个文档讨论了常见的无缝集成问题和怎样去避免它们。它包含了如下主题:
别丢弃数据
一定要记住Android是一个移动平 台。看起来很显然,但是记住这个事实很重要,就是任何Activity(如"正在打进来的电话"应用)在任何时候都有可能弹出来覆盖你的 Activity,这会激活onSaveInstanceState()和onPause()方法,并导致你的应用被杀死。如果当其它Activity出 现时,用户正好在你的应用上编辑数据,你的应用被杀死的同时那些数据也很可能会丢失。当然了,除非你先保存了进行中的工作。“Android方式”是这么 做的:能接收和编辑用户输入的应用需要重写onSaveInstanceState()方法并以恰当的方式保存它们的状态,当用户重新访问应用时,就能重 新获得数据。
一个运用这个行为经典的例子就是邮件应用,当用户正在撰写邮件时另一人Activity开始了,应用应该将正在编辑的邮件保存为草稿。
不要暴露原始数据
如果你不想穿着内衣在大街上散步,同样你的数据也不应如此。尽管可能暴露某些应用可以方便其它应用读取,但这通常不是最好的主意。暴露原始数据要求其它的应用能够理解你的数据格式;如果你改变了格式,你将会破坏其它没有同时更新的应用。
“Android 方式”就是创建一个ContentProvider通过一个清晰的、深思熟虑的、可维护的API来暴露你的数据给其它应用。使用 ContentProvider就像一个Java接口来分离和组件化两段紧密耦合的代码,这就意味着你能够修改你数据的内部格式而不用修改由 ContentProvider暴露的接口,这样就不会影响其它应用。
别打断用户
如果能确定一个用户是带有目的性的运行一个应用才是安全的。那就是为什么你除非是直接响应当前活动的用户输入,不然就要避免产生Activity的原因。
那 就是说,不要从后台运行的BroadcastReceiver和Service中调用startActivity()。如果这样做将会打断任何正在运行的 应用,并使用户恼怒。甚至你的Activity可能成为一个“击键强盗”接收一些用户正在为上一个Activity提供的输入,视乎你的应用所做的,这是 这可能是个坏消息。
取代直接从后台直接产生Activity UIs,你应该用NotificationManager来设置通知,这将会出现在状态条上,当用户空闲时可以点击它们来看你的应用向他们显示了什么。
(注意,当你的Activity已经在前台时所有这些都没适用:这时,对于输入的响应,用户期望看到你的下一个Activity。)
有太多事要做?在一个线程里做
如果你的应用需要做一个代价高昂或长耗时的计算,你可能要将它移到一个线程里。这个将会防止显示“Application Not Responding”对话框给用户,最终导致你的应用完全终止。
默认地,在一个Activity中的代码和其所有的View运行在同一个线程 上。这与处理UI事件的线程是同一个。例如,当一个键被按下时,一个key-down事件被添加到Activity主线程的队列。事件处理系统需要很快地 让这个事件出列并处理这个事件。不然,系统数秒后将会认为应用已经挂起并替用户杀死这个应用。
如果你有长耗时的代码,让它在你的Activity上内联运行将会在使它运行在事件处理线程上,这很大程度上阻塞了了事件处理句柄。这会延缓输入处理并导致ANR对话框。为了避免之,将你的计算移到一个线程中。在为响应灵敏性设计中已经讨论了如何做。
5)不要过载一个单一的Activity屏
任 何值得使用的应用都可能会有几个不同的屏幕。当设计你的UI屏幕时,请一定要运用多个Activity对象实例。依赖于你的开发背景,你可能像解释某些类 似Java Applet的东西一样来解释一个Activity,Activity是你应用的入口点。然而,那并不是准确:一个Applet的子类是一个Java  Applet的单一入口点,而一个Activity应该被看作一个潜在的进入你的应用的多个入口点。在你的”main”Activity和任何其它你可能 有的Activity之间的唯一不同就是,那“miain”Activity碰巧是那个唯一在你的AndroidManifest.xml文件中对 “android.intent.action.MAIN”动作有兴趣的一个而已。
所以,当设计你的应用时,把你的应用看成一个Activity对象的联邦。从长远来看,这会使得你的代码更具可维护性。
6)扩展系统主题
当 提到用户接口的观感时,协调是很重要的。用户为那些与他们所期望的用户接口相反的应用所震动。当设计你的UI时,你应当尽量避免出现太多你自己主题,相反 地,用同一个主题。你可以重写或扩展那部分你必须的主题,但是至少你是基于与其他应用相同的UI基础上的。详细可以参阅“应用风格和主题”部分。
7)设计你的UI可以与多屏分辨率一起工作
不同的的基于Android的设备可能会支持不同的分辨率。甚至一些可能支持随时更改分辨率。保证你的布局和图片足够灵活对于在不同设备屏幕上正常显示是非常重要的。
幸运的是,这是很容易办到的。简单讲,你需要做的就是为你的关键分辨率提供不同版本的作品,然后设计你的布局适应各种不同的维度。(例如,避免作用硬编码位置而用相对布局。)如果那样做的话,剩下的系统会处理,你的应用在任何设备上看起来都很棒。
8)假定网络是很慢的
Android设备会有多种网络链接选项。所有的都会提供数据访问,虽然有一些会比另一些更快。其中速度最慢的就是GPRS(GSM网络的非3G数据服务)。即便具备3G能力的设备在非3G网络上也会花很多的时间,所以网速低将会是一个长期存在的事实。
那 就是为什么你应该针对最小化的网络访问和带宽编写你的应用。你不能假设网络是快速的,所以你应该一直计划它是慢的。如果你的用户碰巧是在一个快速的网络 上,那很好——他们的体验只会提升。你要避免相反的情况:应用有时可用,但有时慢得令人沮丧,得看用户是在哪在什么时间,这样的应用可能不会受欢迎。
别假定触摸屏和键盘
Android可能支持多种外观形状。那就是说一些Android设备将会有完整的“QWERTY"键盘,而其它的可能会有40键、12键或其它键盘设置。同样地,一些设备会有触摸屏,但很多会没有。
当构建你的应用时,一定要记住,不要假定特定的键盘布局——当然了,除非你真的喜欢限制你的应用以到它只能在某些设备上运行。
一定要节省设备电池
如 果移动设备经常局限于屋内,那就不是很“移动”。移动设备是电池供电的,而我们如果能让电池每充一次的电量使用得更持久一些,每个人都会更开心——特别是 用户。其中的两个用电大户就是处理器和音频,那就是为什么你写的应用应尽量做少的工作的同时尽可能频繁地使用网络的原因。
最小化你的应用使用的处 理器时间就归结为书写高效的代码。从音频上最小化功耗,要确保优雅地处理错误条件,并仅获取你需要的东西。例如,如果连接网络失败不要一直重试连接网络, 如果失败了一次,很可能是用户没有接收信号。如果你立即重试,那么你所做的一切只是在浪费电池能量。
用户是相当聪明的:如果你的程序是高耗电的,你可以相信他们会发觉的。在那一点上,唯一可以确定的是你的程序将不会保持安装非常久。

1
1
分享到:
评论

相关推荐

    《Android和PHP开发最佳实践》源码

    当我们谈论"Android和PHP开发最佳实践"时,这通常涉及到如何有效地结合这两种技术来构建跨平台的应用程序,实现后端与移动端的无缝对接。 首先,让我们深入了解Android开发的关键知识点。Android应用主要使用Java或...

    Android开发技巧与性能优化

    4.ANDROID 最佳实践 4.1 为性能设计: 4.2 为响应灵敏性设计 4.3 为无缝设计: 5. 多资源文件的引用 6. ANDROID 调试 LOGCAT 技巧 7. 用 ANDROID 运行最简单的C 程序 8. 开发技巧杂集 8.1 一些源于 CSS 的组合实现...

    Android开发教程之构建无缝的Android程序PPT学习教案.pptx

    在Android开发中,构建无缝的程序意味着要遵循最佳实践,确保应用的专业性和用户体验。以下是一些关键知识点: 1. **使用ContentProvider保护数据** - 在Android中,数据的安全性至关重要。不应直接暴露原始数据,...

    JNI最佳实践

    ### JNI最佳实践 #### 性能缺陷 JNI作为一种强大的技术,允许C/C++代码与Java代码无缝交互,但在实际开发过程中如果不注意某些细节,则可能导致性能下降。以下将详细介绍常见的五种性能缺陷及其应对策略。 1. **...

    RetroMusicPlayer,最佳材料设计Android音乐播放器.zip

    6. **MVVM架构**:遵循现代Android开发的最佳实践,RetroMusicPlayer可能采用了Model-View-ViewModel(MVVM)架构,将业务逻辑与视图分离,提高代码可测试性和可维护性。ViewModel能够保留数据,即使在配置更改(如...

    Android Studio4.1.1安装包,初学者必备版本

    9. **课程设计支持**:对于初学者,Android Studio 4.1.1提供了学习路径和教程,帮助他们快速上手Android开发,理解基本概念和最佳实践。 10. **插件扩展**:Android Studio的开放性允许开发者安装和使用各种插件,...

    Android Studio实战 快速、高效地构建Android应用

     通过学习本书,读者将能够掌握Android工具生态系统中最新、最实用的工具,以及Android App开发中的最佳实践。可以将实验代码作为模板或框架并在自己的类似App中重用和定制。  Android Studio是一款简单直观、功能...

    Kotlin+for+android+developers中文版翻译_kotlin_android_

    《Kotlin for Android Developers》是一本专为Android开发者设计的Kotlin编程语言指南。Kotlin是一种现代、静态类型的编程语言,由JetBrains公司开发,它以其简洁、安全和可空安全性等特点深受Android开发者喜爱,...

    Jetpack MVVM 最佳实践案例

    在Android开发领域,Jetpack MVVM架构组件是目前推荐的最佳实践之一,它为开发者提供了更加清晰、可测试和模块化的代码结构。本实践案例将深入探讨如何有效地利用Jetpack MVVM来构建高效、稳定的Android应用。 MVVM...

    安卓Android篮球教学与场地预订APP设计源码案例设计.zip

    【Android篮球教学与场地预订APP设计源码案例】是一个针对移动平台,特别是Android系统的应用程序开发项目。...同时,这也是一个实践Android最佳实践和最新技术的好机会,例如MVVM架构模式、Kotlin语言特性等。

    Android studio sdk 源码 android-23

    通过深入研究Android 23的源码,开发者不仅可以提升对Android操作系统的理解,还能学习到最佳实践,优化应用性能,解决兼容性问题,并为未来版本的升级做好准备。Android Studio SDK源码的探索是一个持续学习的过程...

    Android Box

    4. **最佳实践**:分享了如何优化性能、提高用户体验、遵循设计规范等方面的建议,提升应用质量。 5. **平台版本历史**:记录了Android各个版本的变更和新特性,便于开发者了解不同版本间的差异,确保应用的兼容性。...

    arcgis runtime samples android master

    7. **最佳实践与优化** 在实际开发中,要注意性能优化,例如合理管理地图对象,减少不必要的网络请求,以及利用缓存机制提高用户体验。此外,遵循Android设计规范,使应用界面友好且易于使用。 总结,ArcGIS ...

    Android 中文说明文档(Chm)

    《Android 中文说明文档(Chm)》是一个专门为Android开发者准备的中文参考资料,它包含了对Android操作系统、开发工具...不过,为了跟上Android系统的不断更新和发展,持续学习新的API、框架和最佳实践是必不可少的。

    《Android应用程序设计教程》PDF

    《Android应用程序设计教程》PDF是针对想要学习和深入理解Android应用程序开发的...通过学习,读者不仅可以了解Android开发的基本概念,还能掌握实际开发中的最佳实践,为成为一名合格的Android开发者打下坚实的基础。

    android_11_dev_booklet.pdf android 11开发手册 谷歌官方文档

    总之,《Android 11开发手册》详尽地介绍了这些变化,并提供了详细的API文档、示例代码和最佳实践指导,帮助开发者充分利用Android 11的新特性,提升应用的质量和用户体验。开发者需要对这些新功能进行深入研究,...

    kotlin-for-android-developers-zh中文版

    6. **最佳实践**:书中还涵盖了Kotlin的编码规范和最佳实践,帮助开发者写出高质量、可维护的代码。 7. **学习路径**:对于初学者,建议先掌握基础语法,然后通过实践项目巩固知识,逐步了解高级特性和Android特定...

    Android Studio中使用kotlin开发项目

    记住,KotlinApp的开发不仅仅是编写代码,还包括设计良好的架构、遵循最佳实践和持续优化,这些都是打造高质量Android应用的关键步骤。 总之,Kotlin为Android开发带来了诸多优势,如简洁的语法、空安全特性、强大...

    android10 apk签名文件

    在Android系统中,APK签名是一个至关重要的过程,它确保了应用的完整性和开发者身份的验证。在Android 10中,这个过程没有本质的...开发者需熟知签名机制,合理运用签名工具,遵循最佳实践,以确保应用的质量和安全性。

Global site tag (gtag.js) - Google Analytics