3.1 Android程序架构
3.1.1 Android项目目录结构
与一般的Java项目一样,src文件夹是项目的所有包及源文件(.java),res文件夹中则包含了项目中的所有资源,比如程序图标(drawable)、布局文件(layout)、常量(values)等。
下面来介绍其他Java项目中没有的gen文件夹中R.java、BuildConfig.java文件和每个Android项目都必须有的AndroidManfest.xml文件。
gen文件夹中所有文件都是自动生成的,而且是只读的不能更改。
? R.java文件是定义该项目所有资源的索引文件。
代码清单:R.java
/* AUTO-GENERATED FILE. DO NOT MODIFY. * * This class was automatically generated by the * aapt tool from the resource data it found. It * should not be modified by hand. */package com.example.prjandroid;public final class R { public static final class attr { } public static final class drawable { public static final int ic_action_search=0x7f020000; public static final int ic_launcher=0x7f020001; } public static final class id { public static final int menu_settings=0x7f070000; } public static final class layout { public static final int activity_main=0x7f030000; } public static final class menu { public static final int activity_main=0x7f060000; } public static final class string { public static final int MIC01=0x7f040004; public static final int MIC02=0x7f040005; public static final int app_name=0x7f040000; public static final int hello_world=0x7f040001; public static final int menu_settings=0x7f040002; public static final int title_activity_main=0x7f040003; } public static final class style { public static final int AppTheme=0x7f050000; }}
? BuildConfig.java文件是你的项目调试(Debug)开关。
代码清单:BuildConfig.java
/** Automatically generated file. DO NOT MODIFY */package com.example.prjandroid;public final class BuildConfig { public final static boolean DEBUG = true;}
? AndroidManfest.xml文件则包含了该项目中所有使用的Activity、Service、Receiver
代码清单:AndroidManfest.xml
项 | 说明 |
mainfest | 根节点,描述了package中所有的内容 |
xmlns | 包含命名空间的声明。 xmlns:android=http://schemas.android.com/apk/res/android,使得Android中各种标准属性能在文件中使用,提供了大部分元素中的数据。 |
package | 声明应用程序包 |
uses-sdk | 该程序使用的Android SDK版本 |
android:icon | 应用程序图标 |
android:label | 应用程序名字 |
android:theme | 程序外观 |
activity | 用来与用户交互的主要工具。 Activity是用户打开一个应用程序的初始页面,大部分被使用到的其他页面也由不同的Activity所实现,并声明在另外的Activity标记中。 注意,每一个Activity必须有一个<activity>标记对应,无论它给外部使用或是只用于自己的package中。 如果一个Activity没有对应得标记,你将不能运行它。另外,为了支持运行时查找Activity,可包含一个或多个<intent-filter>元素来描述Activity所支持的操作 |
android:name | 应用程序默认启动的Activity |
intent-filter | 声明了指定的一组组件支持的Intent值,从而形成了IntentFilter。除了能在此元素下指定不同类型的值,属性也能放在这里来描述一个操作所需的唯一的标签、icon和其他信息。 |
action | 组件支持的Intent action |
category | 组件支持的Intent Category。这里指定了应用程序默认启动的Activity |
下面我们看看资源文件中一些常量的定义,如strings.xml
代码清单:string.xml
prjAndroid Hello world! Settings MainActivity Made In China Made In China
我们定义的Made InChina就在此文件。
当我们使用它们时,把变量名的赋予一个常量即可。在R.java中有如下代码:
public static final class string { public static final int MIC01=0x7f040004; public static final int MIC02=0x7f040005; public static final int app_name=0x7f040000; public static final int hello_world=0x7f040001; public static final int menu_settings=0x7f040002; public static final int title_activity_main=0x7f040003; }
那么如何在程序中使用我们所定义的这些资源呢?首先,通过Content的getResources实例化一个Resources对象,然后通过Resources的getString方法取得指定索引的字符串,代码如下:
Resources res = this.getResources(); String app = (String) res.getString(R.string.app_name); Log.i(TAG, app);
现在来分析Made In China项目的布局文件(layout),首先打开res->layout->activity_main.xml文件,如代码清单如下:
代码清单中,有以下几个布局和参数。
? RelativeLayout 相对布局。
? android:layout_width:定义当前视图在屏幕上所占的宽度,fill_parent即填充整个屏幕。
? android:layout_height:定义当前视图在屏幕上所占的高度,fill_parent即填充整个屏幕。
? android:layout_centerHorizontal:水平对齐,居中
? android:layout_centerVertical:垂直对齐,其中
我们在其后的章节,要详细讲解它们。
3.1.2 Android应用解析
Android应用程序由4个模块构造而成:Activity, Intent, Content Provider, Service。
当然,也不是每个Android应用程序都必须由这4部分组成;但是,任何一个应用程序都必须在AndroidManfest.xml文件中声明使用到的这些模块。
1. Activity
Activity是最基本的模块。就像Delphi程序中的Form一样。
他继承自Activity类。
2. Intent
Intent实现Activity与Activity之间的切换。相当于Delphi中的“program”
3. Content Provider
当想将应用数据与其他的应用共享时,Content Provider就可以发挥作用了。
在Android中,Content Provider是一个特殊的存储数据的类型,它提供了一套标准的接口用来获取和操作数据。并且,Android自身也提供了现成的Content Provider:Contacts、Browser、CallLog、Settings、MediaStore。应用可以通过唯一的ContentResolver界面来使用具体的某个Content Provider,然后就可以用ContentResolver提供的方法来使用你需要的Content Provider了。其中,ContentResolver提供的方法包括query()、insert()、update()等。
4. Service
等同Windows中的Service。
3.2 Android的生命周期