技术开发 频道

Study on Android【一】--概述

  【IT168 技术文档】如果你还不知道google的重磅炸弹Android(中文意思是机器人...感觉google取名字的天赋全部花在google这个词上了...)是什么,你可以看一下这里。如果你觉得挺没有意思,再看一下这里。如果还觉得不好玩,那下面的东西就不需要看了。。。

  对我来说,Android还是很有吸引力的,不然一个MS技术的忠实走狗也不至于一下就投入java的怀抱。至于为什么?恩,等我有八卦精神的时候再使劲的侃。

  在这里还是谈正事的要紧。这几天看了下Android SDK,编了几个练习,获得了一点点经验。简单的罗列一下,比较重要的内容都添上链接,也是方便我和所有需要的人查看。

  按google的说法Android包括一个操作系统,一些中间件和核心应用程序。操作系统是基于Linux的,上面的东西用了些开源的、google也花了不少精力开发了其他一些东东。底层用的是C++,但所有供应用程序开发的API都是java的(伪托管操作系统?^_^)。具体内容可以看一下这里 。基本上不会与你闭着眼睛幻想的有太大区别。

  Android的GUI框架,你可以从你本身的编程经验中看到很多的影子(对我而言主要是.net winform && asp.net,但感觉上很多理念与WPF类似,只是我对WPF只是走马观花的了解了一些*_*,谈不上有任何经验...)。

  首先,在Android中,每一个需要显示并运行的程序都需要有一个Activity 类的派生类,从某个程度上来说它有点类似于Page的概念。每一个Activity从直观上来看就是一屏幕的内容,当你切换了屏幕,基本上就意味着你切换了一个Activity。Activity负责管理界面上的各个显示控件,最重要的,是它提供了基本的生命周期管理的函数,包括OnCreate, OnResume, OnFreeze, OnPause等等。从名字上,就可以大致看出这些函数所负责的内容,但你一定要明白他们具体分工的区别,具体情况查看一下这里 。但与Page不同的是,当一个Activity被切换出去的时候(你随时可能在你未完成所需事情的时候离开一个Activity,因为你用的是手机,你要随时准备接电话,准备迎接GF,准备与悄悄从后面摸过来的老板据理力争),你会希望回来还看到一样的内容。因此,你对Activity的生命管理尤其的重要(特别是当你了解了Android的进程管理的时候...),你可能需要在各个周期点上负责保管状态、恢复状态、传送数据等工作。

  当你从一个界面切换到另一个界面的时候,就涉及到了Activity的切换。当你做这个工作的时候,你需要用到Intent,它包含切换所需的动作、(动作)分类、传送数据等信息。这个类的工作虽然简单,但内容丰富,建议仔细看看SDK,因为开发中你会反复与它打交道,而且可能你需要在两个Activity切换时做很多事情,比如传数据、做一些限定,都需要你对Intent比较熟悉。在配置文档中,你可以使用IntentFilter 对Intent进行过滤和匹配。在一个进程中,系统会维护一个Activity历史记录栈,以更好的维护Activity之间的交互。

  在切换过程中(和其它一些场合),你需要传送数据。在Android中,你需要使用到一个Bundle 的类来传输。Bundle是其实一个key/value的map,不过它提供了很多API,用起来会比较方便。用这种统一格式来传输数据,在所需数据一定时会使判定比较简单,不需要太在乎是谁什么时候进行的传输。

  每一个Activity还需要负责加载这个Activity所需要的显示的内容。显示的每一个部分称作一个view(你可以对应到control上),每一个都会处理键盘等交互事件、完成相应功能,并进行绘制。view的组织基本可以看成是一个复合模式,每一个view还会有相应的style,具体可以看这里。通过派生不同的view类,你可以定制你所需要的特定view(自定义控件...),它可以是简单的多view的特定布局组合,也可以是完成某种特殊功能。一般你会需要重载onDraw和onMeasure,具体可以看这里,规则还是有点小繁琐的。

  但view的构造、layout的设定、样式的设定等等工作,通常不会使用显性的java代码进行编制,而是通过XML进行配置(WPF!!)。所有的资源也都是通过这种方式进行提供(查看这里)。而XML配置文件与代码的联系,是通过R类来进行的。R类是动态构造,它里面有一对的内嵌类,内嵌类里有一堆的静态int ID值。它是有系统自动根据配置文档的增删进行维护(in Eclipse...),完成从名字到ID的转换工作。而所有接受这种ID值的API,都会负责根据XML进行资源的配置。

  Android的进程管理和资源管理都很有意思。通常,每一个应用程序(入口会是一个Activity的onCreate),都会占据一个进程。但这个进程是托管的!!你无法确定它何时会被回收,当系统进程空间紧张的时候,会依照优先级自动进行进程的回收(查看这里 )。由此可以看到,维护一个Activity的生命周期是多么的重要,因为它随时会被系统干掉*_*。同时,每一个应用程序的数据都是独享的。就是你存在数据库、文件的数据别的程序无法访问(其实根本是无法获知)。要在应用间共享数据,比较好的一个策略是把自己做成contentProvider,其他应用可以通过提交特定格式URL申请你的数据×—×(Why URL?...)。

  除了Activity,还有就是server。顾名思义,这就是幕后英雄的角色。他们不在屏幕上占据任何位置,只是在后台默默工作。与他们交互的方法比较传统,主要是监听一些事件。当然很多时候这需要权限,因此你需要了解一些具体内容。

  每一个应用都会有一个Manifest.xml,提供全局的配置。包括设置权限,设置各个Activity的属性等等。维护这个配置文件是一项基本任务(当你添加了新的Activity的时候),因为好像插件不会帮你完成这件比较琐碎的事情。

  本来还看了其他更多的内容。写累了,不写了。其他等有了更多经验再慢慢写吧。如果想学个入门的话,还是建议好好看SDK。Doc基本上是把你看成一无所知(实际上,我就是这样*_*),而源码里也是包含海量的注释(只是时不时就有几个词打错...),连我如此弱的人都感觉看得不错,可想而知这SDK做的还是非常好的。。。

0
相关文章