前一段时间断断续续的看过几天android,由于不连贯,效果不是很好,最近打算用一个月的时间系统的学习一下。

1、android的生态系统
Android是由Google在2007年推出的一个开源系统平台,主要针对移动设备市场,现在的最新版本是Android 3.2,android底层基于精简优化过的Linux kernel 2.6。android系统架构如图:


从图上可以看出来,整个系统分为4层
(1)、Linux Kernel
该层是使用google自己精简优化过的linux系统,使其更适合内存和电量有限的移动设备
主要是负责系统底层的内存管理,安全管理,进程调度以及硬件进行通讯等等,并对其上层提供服务。
(2)、android Runtime
包含两部分:
1、core Libraries(核心库),该核心库提供大部分在Java编程语言核心类库中可用的功能。
2、Dalvik 虚拟机。Dalvik是Google公司自己设计用于Android平台的Java虚拟机,Dalvik 经过优化,允许在有限的内存中同时运行多个虚拟机的实例,并且每一个Dalvik 应用作为一个独立的Linux 进程执行。独立的进程可以防止在虚拟机崩溃的时候所有程序都被关闭。

Dalvik和JVM的几点区别
1、Dalvik 基于寄存器,而 JVM 基于栈。基于寄存器的虚拟机对于更大的程序来说,在它们编译的时候,花费的时间更短。
2、Dalvik主要是完成对象生命周期管理,堆栈管理,线程管理,安全和异常管理,以及垃圾回收等等重要功能。
3、Dalvik负责进程隔离和线程管理,每一个Android应用在底层都会对应一个独立的Dalvik虚拟机实例,其代码在虚拟机的解释下得以执行。
4、不同于Java虚拟机运行java字节码,Dalvik虚拟机运行的是其专有的文件格式Dex,ex文件格式可以减少整体文件尺寸,提高I/o操作的类查找速度。
5、所有的Android应用的线程都对应一个Linux线程,虚拟机因而可以更多的依赖操作系统的线程调度和管理机制

(3)、Libraries
Android包含一个C/C++库的集合,供Android系统的各个组件使用。例如:
libc:这是系统的C库,Media Framework: 媒体库,SurfaceManager 显示系统管理库,负责把2D或3D内容显示到屏幕,WebKit,浏览器内核等不同的库。供上层调用
(4)、Application Framework
应用程序框架,也是我们开发的时候打交道最多的,给我们提供里丰富多彩的应用程序API,通过这些我们可以做出丰富多彩的应用。
Activity Manager(活动管理器),主要负责程序生命周期的管理。
Content Providers (内容提供者),使应用程序能访问其他应用程序(如通讯录)的数据,或共享自己的数据
Resource Manager (资源管理器),提供访问非代码资源,如本地化字符串、图形和布局文件
View (试图),丰富的、可扩展的视图集合,可用于构建一个应用程序。包括包括列表、网格、文本框、按钮,甚至是内嵌的网页浏览器
(5)Applications
四层中的最上层,在系统中安装的应用程序,就位于该层,我们以后写的程序也基本在该层运行,全部由Java语言编写,当然Android也允许用户使用C和C++编写程序的。

2、android应用程序的目录结构

1、src : 没什么好说的,就是我们的源代码了
2、gen : 不知道gen是不是generate的缩写,gen目录存放系统自动维护的一些文件,主要是 R.java。R文件由ADT自动维护,主要是为res目录下面的xml,图像,媒体等文件同步生成一个类似字典的东西,系统中对这些资源的引用可以通过R文件来操作。在编译的时候会对R文件进行检查,如果R文件中没有引用的资源不会被编译打包,以节省系统资源,另外,R文件只有一个,我们不需要也不要去改里面的内容。
3、assets:assets也是一个资源文件夹,assets中的资源可以被打包到程序里面,和Res不同的地方是,ADT会为res下面的文件在R文件中生成一个ID,而不会为assets中的资源生成ID,因此要使用该目录下面的文件,需要通过完整路径的方式进行调用。(该目录下面的文件不会被编译,直接复制到程序安装包中)
4、res:资源目录
drawable:主要存放不同分辨率的图片文件
(1)drawable-hdpi里面存放高分辨率的图片,如WVGA (480x800),FWVGA480x854)
   (2)drawable-mdpi里面存放中等分辨率的图片,如HVGA (320x480)
   (3)drawable-ldpi里面存放低分辨率的图片,如QVGA (240x320)
layout:存放用于布局的xml文件
values:用于存放一些常量(不同类型的变量存放在不同的文件中)
strings.xml 定义字符串和数值
arrays.xml 定义数组
colors.xml 定义颜色和颜色字串数值
dimens.xml 定义尺寸数据
styles.xml 定义样式
anim:存放一些和动画有关的xml文件
xml:存放一些自定义的xml文件
raw:该目录下面的文件不会被编译,直接复制到程序安装包中。

5、AndroidManifest.xml
 <?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android"      package="com.cheney.weiboo"      android:versionCode="1"      android:versionName="1.0">    <uses-sdk android:minSdkVersion="4" />    <application android:icon="@drawable/icon" android:label="@string/app_name">        <activity android:name=".IndexActivity"                  android:label="@string/app_name">            <intent-filter>                <action android:name="android.intent.action.MAIN" />                <category android:name="android.intent.category.LAUNCHER" />            </intent-filter>        </activity>    </application></manifest>


xmlns:android:包含命名空间的声明。xmlns:android="http://schemas.android.com/apk/res/android",使得Android中各种标准属性能够在文件中使用,提供大部分元素的数据。
package:声明应用程序包。
application:包含package中application级别组件声明的根节点。此元素耶可包含application的一些全局和默认的属性,如标签、icon、主题、必要权限等。一个manifest能够包含零个或一个此元素,不能大于一个。
android:icon:应用程序图标。
android:lebel:应用程序名字。
Activity:注册系统中的activity,所有的activity都要在此文件中注册。
android:name:activity的名字,即类名。
intent-filter:声明了指定一组组件支持的Intent值,从而形成IntentFilter。
action:组件支持的Intent action 。
category:组件支持的Intent Category。指定应用程序默认启动的Activity。
uses-sdk: 应用程序所使用的sdk版本。



该文不对的地方希望大家指正。该文参考了很多网上的其它文章,在此一并表示感谢。

更多相关文章

  1. Android(安卓)SDK Platforms 提取下载
  2. 【转】Android中对Log日志文件的分析
  3. android:gravity 和 android:layout_Gravity属性——android开发
  4. 在Android(安卓)Studio中使用cmake编译FFmpeg
  5. Android之文件读写
  6. Android应用程序启动过程源代码分析
  7. Android(安卓)Building System 总结 收藏
  8. Android的权限控制机制
  9. [转]Android(安卓)NDK学习笔记

随机推荐

  1. Android 多样式ProgressBar、ProgressDia
  2. First project in android
  3. Android 格式化超链接
  4. Android 查看保存图片到相册
  5. Android SDK Tools R17发布
  6. Android 实现歌词滚动
  7. LowMemoryKiller in Android
  8. Android 自定义字体(otf,ttf等等)
  9. Android面试题目之三: 字符串转整形
  10. Android 浅析 Volley