学习android也有一段时间了,之前由于各种原因停了一段时间,回来再继续学的时候发现有些东西就生疏了,所以决定把自己学习的历程纪录下来,一方面加深理解,一方面便于以后再回来看。
如下图就是android的系统构架
从图中我们可以看到android系统是依靠linux提供的核心服务,这包括安全、内存管理、进程管理、网络、硬件驱动等等与硬件相关的服务。
我们再从底层往上看,可以看到存在于linux内核之上的是程序库和android的运行程序。libraries即是程序库,它们主要通过Android应用程序框架为开发者提供服务和支持。核心库有:
引用
• 系统C 库- 一个从BSD 继承来的标准C 系统函数库( libc ), 它是专门为基于embedded linux
的设备定制的。
• 媒体库- 基于PacketVideo OpenCORE;该库支持多种常用的音频、视频格式回放和录制,同时支持
静态图像文件。编码格式包括MPEG4, H.264, MP3, AAC, AMR, JPG, PNG 。
• SurfaceManager - 对显示子系统的管理,并且为多个应用程序提供了2D和3D 图层的无缝融合。
• LibWebCore - 一个最新的web 浏览器引擎用,支持Android 浏览器和一个可嵌入的web 视图。
• SGL - 底层的2D图形引擎
• 3D libraries - 基于OpenGL ES 1.0 APIs 实现;该库可以使用硬件3D 加速(如果可用)或者使用高
度优化的3D 软加速。
• FreeType -位图(bitmap)和矢量(vector)字体显示。
• SQLite - 一个对于所有应用程序可用,功能强劲的轻型关系型数据库引擎。
而其中的android runtime就是运行程序,但是我认为把它翻译为运行时的环境或许更恰当一点。它由android的核心代码库和运行Delvik虚拟机组成(这也是我认为翻译为运行环境的理由之一),核心代码库为我们提供了java的语言支持,而Delvik虚拟机是android运行的依托。
再往上我们看到的是Application Framwork也就是应用框架,这部分是所有的核心应用。android作为一个开源手机系统,开发人员也可以完全访问核心应用程序所使用的API 框架。该应用程序的架构设计简化了组件的重用,任何一个应用程序都可以发布它的功能块并且任何其它的应用程序都可以使用其所发布的功能块。而且我们开发手机应用大部分都是在操作这个部分。
最上层就是应用程序了,Android会同一系列核心应用程序包一起发布,该应用程序包包括email客户端,SMS短消息程序,日历,地图,浏览器,联系人管理程序等。所有的应用程序都是使用JAVA 语言编写的。
android的基本系统结构就是这些了,话说光说不练假把式,现在就来写一个简单的对EditText,Button,LinearLayout和AlertDialog的测试程序。
android作为一个手机平台,界面是十分重要的。因为Activity是Android程序与用户交互的窗口,所以要做界面就必须用到Activity这个组件。而每次当你需要用到这个组件的时候都不要忘了,每一个新的Activity都必须在res/AndroidManifest.xml中先进行定义声明的。但是当你建立一个新的android工程时,它会先帮你建立一个*(工程名)Activity.java的类,所以第一个Activity不需要自己在AndroidManifest.xml中定义声明。我们的第一个Activity是UITestActivity.java。
那么我们也可以先看看这个定义:
<activity
android:name=".UITestActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
所以我们可以看出基本的定义申明格式是
<activity
android:name=".*(Activity类名)"
android:label="@string/next_name">
</activity>
现在我们已经有了一个基本的页面了但是页面上只有hello World这样的字眼。那么就让我们加上一些东西吧。
首先我们在页面上加上一个文本框和2个按钮。在android中要在页面上加入按钮等构件,需要先在res/layout/*.xml中设置。*.xml取决于Activity中setContentView()中的对象。
在这里我们使用LinearLayout,线性布局。具体设置如下
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
<EditText
android:id="@+id/text"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/text" />
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/linearlayout1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center" >
<Button
android:id="@+id/showButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/showButton" />
<Button
android:id="@+id/clearButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/clearButton" />
</LinearLayout>
</LinearLayout>
这里使用了2重线性布局。其中的fill_parent为强制性地使构件扩展,以填充布局单元内尽可能多的空间。而wrap_content为强制性地使视图扩展以显示全部内容。
然后在UITestActivity.java中加上java代码
showButton = (Button) findViewById(R.id.showButton);
clearButton = (Button) findViewById(R.id.clearButton);
text = (EditText) findViewById(R.id.text);
这段代码的意义是取得视图中的构件,以便操作。
然后我们设置它们的监听器对象实现功能。
//设置show按钮的监听器对象
showButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
new AlertDialog.Builder(UITestActivity.this)
.setTitle("imfomation")//设置标题
.setIcon(android.R.drawable.ic_dialog_map)//设置图标
.setMessage(text.getText()).show();//设置其内容并显示
//创建一个AlertDialog并将text中的内容输出到其中
}
});
//设置clear按钮的监听器对象
clearButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
text.setText("");
}
});
到这儿其实还有问题,大家可以看到在定义新的Activity时有一个android:label="@string/*,在设置视图的构件时也有android:id="@+id/*,这些东西都还是在报错。其实将它们删了,程序也能再ADK上运行,但是你会发现文本中没有字符,按钮上没有标签。它们就是代表了*这个字符串的值,而这个值是在/res/values/strings.xml中定义声明的。如下:
<resources>
<string name="hello">Hello World, UITestActivity!</string>
<string name="app_name">TestPage1</string>
<string name="text">input you want</string>
<string name="showButton">show</string>
<string name="clearButton">clear</string>
</resources>
这样我们就完成了一个简单的android程序。