天天看点

Android基本概念

  android是一个基于linux、使用java作为程序接口的操作系统。他提供了一些工具,比如编译器、调试器、还有他自己的仿真器(dvm — dalvik virtual machine)。android是由google领导的open handset alliance开发的。

  android使用的虚拟机比较特别。dalvik使用了一些特别的方法。你在android上不能运行普通的java程序。android提供了一个dx的工具,可以把普通的java类文件转换为dex(dalvik executable)文件。android程序最后通过aapt(android asset packaging tool)程序来打包成一个.apk文件。eclipse下面的adt可以自动将class转换为dex,然后在发布的时候打包成apk文件。

  android支持2d和3d的opengl图形库,支持sqlite数据库。

  每一个android程序都运行在android系统分配的一个独立的空间内,所以每个程序都不会影响和破坏到其他的程序,这是很安全的。

  一个android程序由下面这些部分组成。

activity:代表了android程序的展现层,比如用户看到的界面。一个android程序会有一些个activities,在程序运行过程中也会切换。

views:一个activities的用户界面是继承自android.view.view。views的布局通过android.view.viewgroups来管理。

services:不需要ui展现的后台任务。可以通过android的提醒框架给用户提示。

content provider:为程序提供数据,通过content provider你的程序可以与别的程序共享数据。android的sqlite数据库可以看做一个content provider。

intents:是一个异步的消息系统,可以从别的系统或服务获取数据。程序可以直接调用一个服务或者activity,也可以请求android系统。

broadcast receiver:接受系统消息或者隐含的intent,可以根据系统的改变做出反应。一个程序可以注册成为某些事件的broadcast receiver,当事件发生时,程序就执行。

  android对一些任务有特别的许可。例如一个程序需要使用internet,那么就需要在他的配置文件中获取相应的许可。在安装过程中,用户可以确认这个程序是否取得相应的许可。

  每一个android程序都通过androidmainfest.xml来描述。这个文件中必须声明所有的activity、services、broadcast receiver、以及content provider。也需要包含程序需要的许可。例如,如果程序需要访问网络,就必须声明。“andrmanifest.xml”可以认为是android程序的部署声明。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

<code>&lt;</code><code>span</code> <code>style="font-size: 14px;"&gt;&lt;?</code><code>xml</code> <code>version="1.0" encoding="utf-8"?&gt;</code>

<code>      </code><code>package="com.rockux"</code>

<code>      </code><code>android:versioncode="1"</code>

<code>      </code><code>android:versionname="1.0"&gt;</code>

<code>    </code><code>&lt;</code><code>application</code> <code>android:icon="@drawable/icon" android:label="@string/app_name"&gt;</code>

<code>        </code><code>&lt;</code><code>activity</code> <code>android:name=".convert"</code>

<code>                  </code><code>android:label="@string/app_name"&gt;</code>

<code>            </code><code>&lt;</code><code>intent-filter</code><code>&gt;</code>

<code>                </code><code>&lt;</code><code>action</code> <code>android:name="android.intent.action.main" /&gt;</code>

<code>                </code><code>&lt;</code><code>category</code> <code>android:name="android.intent.category.launcher" /&gt;</code>

<code>            </code><code>&lt;/</code><code>intent-filter</code><code>&gt;</code>

<code>        </code><code>&lt;/</code><code>activity</code><code>&gt;</code>

<code> </code> 

<code>    </code><code>&lt;/</code><code>application</code><code>&gt;</code>

<code>    </code><code>&lt;</code><code>uses-sdk</code> <code>android:minsdkversion="9" /&gt;</code>

<code>&lt;/</code><code>manifest</code><code>&gt;</code>

<code>&lt;/</code><code>span</code><code>&gt;</code>

  

 package属性定义基础库。他必须是唯一的。所以比较好的处理办法就是使用你自己的域名的倒序,防止冲突。

  “android:versionname” 和”android:versioncode”用来表明你的程序的版本。versionname可以是任意的字符串用来给用户看的,versioncode必须是整数,这是菜市场用来判断你的程序是否更新的一个标志。通常从1开始,然后发布一个新版本就+1。

  “activity”定义了这个类下面的动作。

  “uses-sdk”属性用来确定你的程序需要的sdk的最低版本,防止你的程序被安装在不被支持的sdk上。

  android项目中的gen目录包含一些生成的文件。生成的“r.java”包含了项目中的res文件中的资源文件。这些资源部署在res文件夹的可以是菜单、布局图标、图片、动画等等。例如,一个资源文件可以是一个图片或者一些包含了某些字符串的xml文件。

  如果你创建了一个新的资源,那么他就自动创建在r.java中。他的引用是一个整型值,android系统有一些方法可以访问到这个资源。比如可以通过getstring(r.string.yourstring)来访问你的字符资源的引用,但是最好不要去改动r.java。

  assets中可以存放任何类型的数据,在java中你可以通过assetsmanager以及getassets()方法来访问。

  动作的用户界面通过布局来确定。layout是android.view.viewgroups的一个实例。layout定义了ui元素,他们的属性以及摆放位置。ui元素基于android.view.view。

  布局可以通过java代码或者xml文件来定义。在你不知道内容的时候可以使用java代码布局,比如你的内容是从网上获取到的数据。

  基于xml的布局定义在/res/layout中。这些文件描述了视图组、视图、以及他们的关系和具体的属性。如果一个ui元素需要通过java代码访问,那么你就需要通过android.id来赋予这个元素一个唯一的id。

  通过xml定义布局是比较推荐的一种方式,可以将视图和程序的逻辑分离,比较好管理一些。

  操作系统控制着程序的生命周期。操作系统可以在任何时候中断程序,比如有来电了。android对于动作有一些预先定义的关于生命周期的方法,比较重要的是:

onsaveinstancestate():如果动作停止就会调用。用来存储数据,好让重新启动的时候恢复到原来的状态。

onpause():在动作结束的时候触发,用来释放资源和存储数据。

onresume():在动作重启的时候触发,用来初始化程序

  android.context.context类提供了与系统通信的方法。他是程序的全局信息的一个接口。contexts提供了getsystemservice方法可以用来接收不同硬件的消息。作为动作和服务,你可以直接通过this来访问。