什么是Anti-Patterns?
业内有一本圣经级别的参考书《Design Pattern》,由四个“勤劳”的人共同完成,目前已经成为软件开发标准,称之为设计模式。与其相反,那些需要严禁避免的模式称之为Anti- Patterns。这篇文章将详细的介绍在Android开发过程中极易遇到的五个Anti-Patterns。
应该有一部分人已经体验到了最新版本(android 1.5 )中增强的大部分功能,它的确较上一版本有非常大的飞跃(也难怪是从1.1直接跳到1.5)。在体验到Android开发小组所带来的惊喜之后,有必要快速冷静面对基于这个版本开发所需要特别注意的一些问题。在这里的一偏文章中 “Android 1.5 的新马甲 (New UI Framework) ” 曾经提到过有关UI方面的问题,这也是以前所开发的程序在新版本SDK发布后表现最明显的区别。
针对这次版本“跳跃式”更新给开发者所带来的某些麻烦,Android开发小组也努力的尝试将Android Market中比较流行的APPs(1.0/1.1 SDK开发的程序)在新版本SDK 的平台做测试,并总结出五个非常有价值的参考。如果你正着手准备基于新版本SDK的开发计划,那么请不要错过以下内容:
1, 不要使用Internal APIs(Private APIs)
考虑到程序的兼容性,Android小组一直着重强调反对使用Internal APIs(“Do not do this! ”),但仍然有部分开发者直接或者间接的在程序中调用一些容易导致问题的接口。例如:internal brightness control ,如果你的程序中有使用这个接口(private API)或者类似的接口,将会在1.5版本中出现问题。因为此前是不要求获得对Internal APIs调用的许可,当1.5版本修正了这个问题之后,如果依然在新版本SDK上运行同样的程序,则将导致发生Crash。
在1.5中只能为当前显示的Window/Activity 修改Brightness,而不会影响到全局设置。
1.5 SDK 设置Brightness属性方法:
// Make the screen full bright for this activity.
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.screenBrightness = 1.0f;
getWindow().setAttributes(lp);
2,APPs需要系统为其提供必要的运行环境
在之前的版本中,经常有用户发现自己的系统设置被某些Apps强制修改,而期间并没有收到任何提醒。例如:程序可以绕过用户的许可,直接打开系统 GPS服务。在新版本中对这种情况做出了调整,尤其是当用户本地系统设置无法满足某些APPs运行所需的必要条件时,APPs将无法直接修改用户的系统设 置以满足其运行环境。
例 如:某个程序需要系统提供GPS支持,那么当用户关掉这项服务时,APPs则无法直接提供正常的服务。遇到这种情况APPs不会发生严重Crash,同时 更不会因为无法取得数据而没有任何响应。取而代之的是抛出一个供用户选择的对话框,用户可以当前运行的Apps手动开启某些服务。
可以在即将发布的1.5 SDK Document 中查找android.provider.Settings.Secure类,得到更多参考信息(本站会在第一时间通知大家有关开发文档的发布情况)。
3, Activity加载复杂的Layout结构
这种情况并不是常见,但偶尔会因为要实现某种功能,使得Activity的Layout层级结构变得异常复杂。[根据Android Developer Blog ( '以下简称:ADB') 的解释] 如果把Layout的层级视作为拥有深度和宽度的2D结构(深度:Layout中View的子集层级数量,宽度:在相同层级中同时出现的Views数 量),当深度超过10+或者宽度超过30+时极容易引起APPs的Crash。对于大部分开发者将这看作为是对APPs非常严重的潜在威胁,同时非常小心 谨慎的编辑Activity的Layout(ADB指出应用FrameLayout或者TableLayout来优化Activity的Layout结 构),因为在以前的版本中并没有对这个问题有过严格标准的限定。这一次的版本(Android 1.5)针对这个问题作了较大的改善,但并不是绝对安全。值得强调的是无论系统做的有多么完美,我们依然需要遵守“优化”原则来对待APPs中的任何资 源,毕竟手机应用某种层度上还受制于资源的限制。
4,应用程序尽量避免受制于硬件设备
在Android 1.5中增加了软键盘Widget,而且将来即将投放市场的用户终端设备也取消了物理键盘。此前的一些APPs应用物理键盘来Handle一些 Events,会受限制于这次取消物理键盘的现实情况。Android Developer Blog在今后将会发布一些有关如何Handle soft keyboard的方法(本站也将同步相关技术的发布,请密切留意)。
5,谨慎应对 “Screen orientation”
在Android 1.5以及以后的版本中,系统将会根据设备的方向而自动调整Screen orientation。这个变化将会影响到基于之前版本SDK开发的APPs,会引起一些无法预料的行为结果。因为此前的APPs假定旋转行为是由弹出 物理键盘所致,往往程序会基于这样的特定情况作出响应,可在新版本SDK中发生屏幕旋转的条件可能来自不同情况(由加速响应器或者其它等)。
技巧:如果不希望程序发生旋转响应,可以在androidManifest.xml中设置android:screenOrientation属性。
以上是来自Android Developer Blog中所提到的五个值得开发者在开发过程中需要着重考虑的一些比较重要的内容。会帮你开发更健壮,更稳定的应用,可以更好的将原有的程序过度到新版本SDK。