Android:基础

一、Dalvik VM

    首先,Dalvik VM获取生成的Java类文件,将它们组合为一个或多个Dalvik可执行文件(.dex)。Dalvik VM的目标是找到所有可能的方式来优化JVM空间、性能及电池寿命。

    采用Dalvik VM的一个结果是,Android最终的可执行程序代码不是基于Java字节码,而是基于.dex文件。这意味着无法直接执行Java字节码,必须首先找到Java类文件,然后将它们转换为可链接的.dex文件。

 

二、Android基础组件

     Android UI框架以及很多其他部分都依赖于Intent(意图),Intent是调用Android组件的intra-及interprocess机制。

    在Android中,组件是指一段具有确切生命周期的代码。Activity就是一个组件,进程中服务其他客户端的服务也是一个组件,唤醒事件响应的接收器也是一个组件。

    虽然Intent的主要作用是调用组件,但是它同时也可以服务于窗口化消息、操作、发布订阅模型和进程间通信等组件。

    例如,下面是启动Web浏览器的代码:  

Intent intent = new Intent(Activity.ACTION_VIEW);
intent.setData(Uri.prase("http://www.google.com"));
activity.startActivity(intent);

    另外,ContentProvider(内容提供者),是对数据源的抽象,使它看起来像是RESTful服务发出者和使用者。底层SQLite数据库使这个ContentProvider成为了开发人员的强大工具。

 

三、资源文件

1、简介

    Android大量的使用XML文件,而XML是一种臃肿的数据形式。事实上,在开发期间创建的XML会使用AAPT(Android Asset Packaging Tool,Android资产打包工具)编译为二进制文件。因此当将应用程序安装在设备上运行时,设备上的文件将存储为二进制形式。在运行时需要某个文件时,将会读取该文件的二进制形式,而不会将其转换回XML。

    另外一种称为原始文件,包括了图像、音频和视频等等。如果将文件放到res/raw目录下,它们将不会被编译为二进制格式。但因为它是资源,Android可以通过R.java生成一个ID。原始文件的格式是raw,因此可以通过R.raw.xxx来访问这些文件ID。另外,必须使用明确基于流式传输的API来读取这些文件。

    AAPT中的资源编辑器会编译除raw资源以外的所有资源,并将它们都放到最终的.apk文件中。该文件将被安装到设备上。

2、关键资源 

    颜色:R.color.xxx,文件中的XML节点为/resources/color;

    字符串:R.string.xxx,文件中的XML节点为/resources/string;

    字符串数组:R.array.xxx,文件中的XML节点为/resources/string-array;

    复数:R.plural.xxx,文件中的XML节点为/resources/plurals;

    尺寸:R.dimen.xxx,文件中的XML节点为/resources/dimen;

    图像:drawable等及其他;

    色图:drawable,以及drawable中放置包含根XML标记<shape>的XML文件,后者支持圆角矩形和渐变矩形;

    任意XML文件:/res/xml/xxx.xml:允许将任意XML文件用作资源,这些文件使用AAPT编译器编译,在R文件中为R.xml.xxx;    

    任意原始资源:/res/raw/xxx.xxx:此目录下的任意未编译的二进制文件或文本文件,在R文件中为R.raw.xxx;

    任意原始资产:/assets/xxx.xxx/xxx.xxx:支持此目录下任意子目录中的任意文件,这些文件不是真正的资源,只是原始文件。与/res/目录不同的是,该目录支持任意深度的子目录。这些文件不会生成任何资源id,因此需要使用以/assets/开始(不包含它)的相对路径名。

3、使用任意XML资源文件、原始资源

    Android运行将任意XML文件用作资源,这样将使用资源的优势延伸到了任意的XML文件。存储在/res/xml子目录下。就像前面一样,AAPT将编译次XML文件,然后放入应用程序包中。如果需要读取的话,可以使用一个XmlPullParser实例。然后就是解析XML。

Resources res = activity.getResources();
XmlResourceParser xpp = res.getXml(R.xml.myXml);

优势有:

1、它提供了一种快速方式来根据所生成的资源ID引用这些文件;

2、该方法允许本地化这些资源XML文件;

3、可以在设备上高效地编译和存储这些XML文件。

    除了任意XML文件,Android还支持原始文件。位于/res/raw下,包括了音频、视频或文本文件等需要本地化或通过资源ID引用的原始文件资源。

    和前面的任意XML文件不同,这些文件没有编译,它们按照原样被转移到应用程序包中。但是,每个文件都会在R中生成一个标识符。

String getStringFromRawFile (Activity act) throws IOException {

  Resources res = act.getResources();
  InputStream is = res.openRawResource(R.raw.myRaw);
  
  String text = convStreamToString(is);
  is.close();
  
  return text;
}


String convStreamToString(InputStream is) throws IOExcetion {

  ByteArrayOutputStream baos = new ByteArrayOutputStream();
  int i = is.read();
  while (i != -1) {
    baos.write(i);
    i = is.read();
  }
  return baos.toString();
}

4、使用资产

    Android还提供了一个/assets目录,它并没有保护到/res,也就是说,它是和/res同级的。

    assets/中的文件不会在R中生成ID,所以必须指定路径才能读取它们。 

AssetManager am = activity.getAssets();
ImputStream is = am.open("my.txt");
String str = convStreamToString(is);
is.close();

return s;

四、 资源和配置更改

    例如:/res下有3个layut文件

    \res\layout\main.xml

    \res\layout-port\main.xml

    \res\layout-land\main.xml

    尽管有3个独立的布局文件,但是在R中只生成一个ID,ID名为R.layout.main。虽然只有1个ID,但是当获取与次ID对于的布局时,将获得适合该设备布局的恰当布局。

    上面的-port和-land称为配置修饰符,不区分大小写,使用“-”和资源目录名称区分开来。在这些配置修饰符目录指定的资源称为备用资源。没有配置修饰符的资源称为默认资源

    配置修饰符是有优先级的,即一个变体相对于其他变体的优先级。给定资源ID,Android使用一种算法来挑选正确的资源。

你可能感兴趣的:(Android基础)