Android培训之Android开发入门如何对复杂的框架进行扩展(上)
2016-02-26 11:16:27
399浏览
在之前的文章中,你已经了解了Android开发路线图,接下来显然会问: “我该如何使用该框架来构建自己的应用呢?”如何对这复杂的框架进行扩展,把它变成优秀的应用呢?
正如你所想到的,该问题有不同的答案。Android库在组织上支持在不同层次上访问框架。本节所描述的概念已经深入Android的内幕。了解这些概念将有助于提升如何轻松通过Android API进行交互的“本能”。
20年前,应用多是通过命令行运行,其大部分代码是唯一的程序逻辑。但是,现在应用需要支持非常复杂的交互式用户界面、网络管理和调用处理等。支持逻辑对于所有的应用都是相同的。随着应用环境变得越来越复杂,Android框架处理这些逻辑的方式已经得到相当普遍的应用:骨架应用(skeleton application),或称应用模板(applicationtemplate)。
当创建简单的演示程序来验证Android SDK的安装是否成功时,即第1章介绍的,就已经创建了一个完整的可运行应用。它可以发送网络请求,显示并处理屏幕输入。虽然没有实际使用它,但它可以处理来电,也能检查地理位置。该应用还不能做任何事情。这就是骨架应用。
在
Android开发框架中,开发人员的任务更多的不是要构建一个完整的程序,而是实现特定行为,然后在正确的扩展点把这些行为插入到骨架应用中。MacApp作为最早的骨架应用框架之一,其箴言就是: “Don’t call US,we’11 call you.”如果创建Android应用的主要工作是理解如何扩展框架,那么考虑一些通用的最佳实践来实现这些扩展是有意义的。
重写(override)和回调
最简单且最容易实现的(程序员在框架中添加新的行为的首选)应该是回调。回调是Androidgg中非常普遍的模式,其基本思想已经在第2章做了详细描述。为了创建一个回调扩展点,类必须给出两个定义。首先,定义Java接口(通常是以Handler、Callback或Li stener结尾的名字)来描述回调行为,但是并不实现该行为。其次,定义setter方法,用一个实现该接口的对象作为其参数。
假定有个应用需要接收用户的文本输入。文本输入、编辑和显示当然需要一套庞大复杂的用户接IZl类集合。但是,大部分接口应用不需要关心。相反,它只是在布局(1ayout)中添加一个小组件库,例如EditText(1ayout和widget在P167“组装图形界面”一节中描述)。Android框架对小组件进行实例化,在屏幕上显示它,当用户输入时更新其内容等。实际上,它执行了除了程序所实现的功能之外的所有事情:内容文本由应用代码进行处理。这是通过回调实现的。
多态和组合
在Android开发中,正如在任何其他面向对象的环境中,多态(polymorphism)和组合(composition)是扩展环境的强大工具。上面给出的例子本身已经证明了多态和组合的价值。我们先暂停一下,重新强化一下概念,重申其作为设计目标的价值。
TextWatcher的匿名实例作为回调对象传递给addTextChangedListener,它使用组合来实现这种行为。该实例本身并没有实现任何行为。相反,addTextChangedListener委托(delegate)给MyModel的handleTextChange方法,采用的是has—a的实现方式,而不是is—a。这使得代码看起来清晰独立。举个例子,如果对MyModel进行扩展,那么使用另一个源中的文本,新的源也会使用handleTextchange方法。不需要跟踪追查后面匿名类的代码。
查看更多关于“Android培训资讯”的相关文章>>
标签: