职业IT人-IT人生活圈

 找回密码
 成为会员
搜索
查看: 407|回复: 9

Android 学习笔记【基础扫盲篇】

[复制链接]
jinchang 发表于 2011-8-13 10:13 | 显示全部楼层 |阅读模式
前一段时间断断续续的看过几天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:资源目录(我们不能在Res目录下面建立自定义目录,以及为已有的目录建立子目录)
     drawable:主要存放不同分辨率的图片文件
             (1)drawable-hdpi里面存放高分辨率的图片,如WVGA (480x800),FWVGA480x854)
           (2)drawable-mdpi里面存放中等分辨率的图片,如HVGA (320x480)
           (3)drawable-ldpi里面存放低分辨率的图片,如QVGA (240x320)
     layout:存放用于布局的xml文件
     values:用于存放一些常量(不同类型的变量存放在不同的文件中,该目录中xml的文件名 是不能改的)
               strings.xml 定义字符串和数值
               arrays.xml 定义数组
               colors.xml 定义颜色和颜色字串数值
               dimens.xml 定义尺寸数据
               styles.xml 定义样式
     anim:存放一些和动画有关的xml文件
     xml:存放一些自定义的xml文件
     raw:该目录下面的文件不会被编译,直接复制到程序安装包中。

5、AndroidManifest.xml
   Xml代码  
<?xml version="1.0" encoding="utf-8"?>  
lt;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>  

<?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:用户交互工具。
android:name:应用程序默认启动的Activity。
intent-filter:声明了指定一组组件支持的Intent值,从而形成IntentFilter。
action:组件支持的Intent action 。
category:组件支持的Intent Category。指定应用程序默认启动的Activity。
uses-sdk: 应用程序所使用的sdk版本。


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

hxy 发表于 2011-8-13 10:13 | 显示全部楼层
不错啊,这对新手来说,还是可以看看的

broken 发表于 2011-8-13 10:14 | 显示全部楼层
iadcn 写道
不错啊,这对新手来说,还是可以看看的



已经来了吗 发表于 2011-8-13 10:14 | 显示全部楼层
cheney_love 写道
前一段时间断断续续的看过几天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:资源目录(我们不能在Res目录下面建立自定义目录,以及为已有的目录建立子目录)
     drawable:主要存放不同分辨率的图片文件
             (1)drawable-hdpi里面存放高分辨率的图片,如WVGA (480x800),FWVGA480x854)
           (2)drawable-mdpi里面存放中等分辨率的图片,如HVGA (320x480)
           (3)drawable-ldpi里面存放低分辨率的图片,如QVGA (240x320)
     layout:存放用于布局的xml文件
     values:用于存放一些常量(不同类型的变量存放在不同的文件中,该目录中xml的文件名 是不能改的)
               strings.xml 定义字符串和数值
               arrays.xml 定义数组
               colors.xml 定义颜色和颜色字串数值
               dimens.xml 定义尺寸数据
               styles.xml 定义样式
     anim:存放一些和动画有关的xml文件
     xml:存放一些自定义的xml文件
     raw:该目录下面的文件不会被编译,直接复制到程序安装包中。

5、AndroidManifest.xml
   Xml代码  
<?xml version="1.0" encoding="utf-8"?>  
lt;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>  

<?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:用户交互工具。
android:name:应用程序默认启动的Activity。
intent-filter:声明了指定一组组件支持的Intent值,从而形成IntentFilter。
action:组件支持的Intent action 。
category:组件支持的Intent Category。指定应用程序默认启动的Activity。
uses-sdk: 应用程序所使用的sdk版本。


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


钰云 发表于 2011-8-13 10:14 | 显示全部楼层
讲解的蛮详细,正在学习中~~~

gz-vps 发表于 2011-8-13 10:14 | 显示全部楼层
楼主很细心啊。。。

北大青鸟 发表于 2011-8-13 10:14 | 显示全部楼层
loveaimee 写道
楼主很细心啊。。。



找不到我 发表于 2011-8-13 10:14 | 显示全部楼层
不错不错。

天上智喜 发表于 2011-8-13 10:15 | 显示全部楼层
对新手来说 很不错啦  希望楼主继续总结下去


只学java 发表于 2011-8-13 10:15 | 显示全部楼层
总结的很好
您需要登录后才可以回帖 登录 | 成为会员

本版积分规则

QQ|手机版|小黑屋|网站帮助|职业IT人-IT人生活圈 ( 粤ICP备12053935号-1 )|网站地图
本站文章版权归原发布者及原出处所有。内容为作者个人观点,并不代表本站赞同其观点和对其真实性负责,本站只提供参考并不构成任何投资及应用建议。本站是信息平台,网站上部分文章为转载,并不用于任何商业目的,我们已经尽可能的对作者和来源进行了通告,但是能力有限或疏忽造成漏登,请及时联系我们,我们将根据著作权人的要求立即更正或者删除有关内容。

GMT+8, 2024-5-2 15:07 , Processed in 0.152631 second(s), 20 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表