【转】Pro Android学习笔记(一):Android 平台 2013.6.4
本系列是阅读《Pro Android4》的读书笔记,也包括网络阅读资料的整理,以及个人心得。
由于智能手机引入AP(应用处理器),Android在某种意义上是个人计算机,具有桌面计算机的完整架构,采用Linux-based OS stack来管理设备、内存和进程。Android的Java库覆盖电话,视频、连接、图形、UI编程等多个方面。Android SDK支持几乎全部的J2SE,除去UI的AWT和Swing部分,而用Android UI framework取而代之。
Android针对手持设备的受限内存、处理器速度和电池能力进行优化Dalvik VM。Dalvik VM将所生成的Java calss文件封装到一个或多个Dalvik执行性文件(.dex)。最终在Android执行的代码,并不是Java Byte code,而是.dex文件。也就是你不能直接运行Java Byte code,需要转为.dex文件。
应用开发者的Android架构视图
从应用开发者角度看Android软件stack。

LinuxKernel处理设备驱动、资源访问、电源管理以及其他的OS工作。(Wei:我觉得这不准确,因为Android有改动,特别是HAL,且Linux社区没有接纳Android的贡献。)
在内核之上是C/C++库,如OPenGL,WebKit,FreeType(字体处理),SSL,libc,SQLit、Meida。Bionic是Android基于BSD的Glibc,针对嵌入系统进行改良的libc版本,大小约为原来的一半。媒体库是基于PacketVideo的OpenCore,用于录制和播放音频及视频格式。Surface管理器处理系统显示,支持2D和3D。Android采用Skia作为2D图形库,采用OpenGL ES来支持3D。
绝大部分的应用框架是通过DalvikVM来访问核心库。Dalvik VM运行多个VM实例。当Java应用访问核心库时,每个应用获得它自己的VM instance。(Wiki:Dalvik虚拟机器可以有多个实例,每个Android应用程序都用一个自属的Dalvik虚拟机器来执行,让系统在执行程序时可达到优化。Dalvik虚拟机器并非执行Java字节码,而是执行一种称为.dex格式的档案)
Android Java库就是Android标准架构图中的应用框架层,包括电话、资源,位置、UI、内容提供者、和包管理器。开发者在这些API上进行应用开发。有些应用已经集成到系统上,如Home,联系人,电话,和浏览器。
通过Android SDK开发应用
Android模拟器。Android模拟器能支持90%的应用开发,但在USB连接、摄影和视频捕获,电池模拟,蓝牙,耳机,Wi-Fi,NFC和OpenGL ES上有限制。Android采用QEMU技术,是开源的“处理器模拟器”,允许一个OS模拟器在另一个OS上运行。(Wei:MeeGo的模拟器也是采用QEMU,此外还需要KVM,最大的问题是KVM虚拟化需要硬件的支持,即CPU必须支持VT,但不是所有桌面机的CPU都能支持,特别手提的CPU)
Android UI。Android UI可以用XML脚本文件来定制UI应用的窗口,通过ID来获取在Java代码中进行控制。而屏幕或窗口在Android中称为activity。View是Android基础的UI单位,可组合为view group。View内部使用cavase,painting和用户交互这些熟悉概念。在Android 3.0引入新UI概念fragment,目的是在大屏幕(平板)上处理多窗格,而fragment提供窗格的抽象。Android框架的一个关键概念是activity窗口的生命周期管理。
基础组件。Android的UI框架引入新概念intent。Intent是一个进程内和进程间唤醒组件的机制。作为组件就是一段有明确生命周期的代码,如activity、service,由事件唤起的receiver,都是组件。要调起组件,intent具有窗口消息,action,发布和订购模式,以及进程间通信。
Android对资源支持很直观,支持string,bitmaps以及XML-basedView定义。自动生成文件R.java就是对资源的描述,每个自动生成的ID都对应在XML文件中元素或整个XML文件。开发者可通过这些ID使用这些XML定义。这对于处理本地语言环境、设备大小适配等非常有帮助。
另一个新概念是content provider,数据源的抽象。
先进UI概念。Android引入很多先进的UI概念。包括采用XML方式来描述layout和menu,异步dialog(注意,不是Windows中MFC的同步方式的modal dialog),对动画的支持,包括frame-by-frame动画,视觉转换的渐变方式(放大、缩小,位移,旋转、角度)。Android通过OpenGL ES支持3D图形。OpenGL ES是C库,Android沿用了J2ME中对Open ES定义的API,具体可以参考ProAndroid 3。
在HomeUI方面。Android支持live floder(是一种小型的应用层插件。它本身体现为桌面出现的图标,通过点击这些图标,将出现一个列表框,列表框中将显示数据信息。通过活动目录可以在不打开应用程序的情况下,在桌面就能查看其中的数据信息。[1])。但是随着对home screen widget的支持,livefloder的作用渐微。Android还提供Integrated Search,可以搜索设备和网络的信息,提供searchAPI。
此外还有自定义的手势、传感器控制、动态配置(如根据横竖屏进行的排版),平板的actionbar,Drag-and-drop(Android 4.0中可用于phone和pad)等。
上面的这一些大都会在《Pro Android 4》后面章节中详细描述。
其他。此外还有Service组件,Media组件、Telephony组件,具体可以详细阅读Android SDK reference对package的说明。Android通过应用的AndroidManifest.xml文件来体现这些概念,包括activities的定义、service和contentprovider的注册,许可声明等等。
目前Andriod有超过50个包和过千个class。除了andriod.*外,还包括java.*,javax.*,以及其他,如org.apache.http,org.json, org.w3c.com,org.xml.sax, org.xml.sax.ext, org.xml.sax.helpers, org.xmlpull.v1, and org.xmlpull.v1.sax2开头的namespace包。
从Android开源代码中获益
Android源代码教程在http://source.android.com。Git在https://android.googlesource.com/,但目前不支持在线阅读,必须git下来。在线阅读可在http://www.oschina.net/code/explore/android-4.0.1。或者更为完整的,更便于阅读的,可访问http://www.grepcode.com/search/?query=google+android&entity=project。
相关链接: 我的Android开发相关文章
转自http://blog.csdn.net/flowingflying/article/details/9020783
【转】Pro Android学习笔记(一):Android 平台 2013.6.4的更多相关文章
- Android学习笔记1 android adb启动失败问题 adb server is out of date. killing...
下面是Android的学习笔记,原文地址. 我是使用adb devices出现如下红字错误, 使用第一种方法方法,结果关掉豌豆荚就可以了. android adb启动失败问题 adb server i ...
- Android学习笔记之Android Studio添加新的Activity
1.创建Android项目工程:AndroidTest 创建过程可参考网上诸多教程. 2.添加新的Activity,步骤如下 a. 在layout文件夹上右键,New-Activity-相应Activ ...
- Android学习笔记之 android:collapseColumns ,android:shrinkColumns 和stretchColumns
摘自:http://blog.csdn.net/sjf0115/article/details/7213565/ TableLayout是一个使用复杂的布局,最简单的用法就仅仅是拖拉控件做出个界面,但 ...
- android学习笔记45——android的数据存储和IO
android的数据存储和IO SharedPreferences与Editor简介 SharedPreferences保存的数据主要是类似于配置信息格式的数据,因此其保存的数据主要是简单的类型的ke ...
- Android学习笔记之Android Studio下创建menu布局文件
1.创建menu文件夹 Android Studio项目中如果没有menu文件夹,在res文件夹右键,new-Android resource directory: 则会弹出下图对话框,在Resour ...
- Android学习笔记_79_ Android 使用 搜索框
1.在资源文件夹下创建xml文件夹,并创建一个searchable.xml: android:searchSuggestAuthorityshux属性的值跟实现SearchRecentSuggesti ...
- android学习笔记(9)android程序调试学习
相应若水老师的第十四课 一,Log日志输出 Log.v(tag,message); //verbose模式,打印最具体的日志 Log.d(tag,message); // ...
- Android学习笔记(1)—Android Studio安装
Android Studio 是一个全新的 Android 开发环境,基于IntelliJ IDEA. 类似 Eclipse ADT,Android Studio 提供了集成的 Android 开发工 ...
- Android学习笔记1——Android开发环境配置
一.JDK配置 Android是基于Java进行开发的,首先需要在电脑上配置JDK(Java Development Kit).在http://www.androiddevtools.cn/下载对应系 ...
- Android学习笔记(36):Android的两种事件处理方式
Android提供了两种事件处理的方式:基于回调的事件处理 和 基于监听的事件处理. 我们来说的easy理解一点: (1)基于回调的事件处理就是继承GUI组件,并重写该组件的事件处理方法.除了一些特定 ...
随机推荐
- InputFormat的认识
InputFormat 负责处理MR的输入部分. 有三个作用: 一.验证作业的输入是否规范. 二.把输入文件切分成InputSplit. 三.提供RecordReader 的实现类,把InputSpl ...
- 【BZOJ2476】战场的数目 矩阵乘法
[BZOJ2476]战场的数目 Description Input 输入文件最多包含25组测试数据,每个数据仅包含一行,有一个整数p(1<=p<=109),表示战场的图形周长.p=0表示输 ...
- 九度OJ 1083:特殊乘法 (基础题)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:4114 解决:2809 题目描述: 写个算法,对2个小于1000000000的输入,求结果. 特殊乘法举例:123 * 45 = 1*4 + ...
- vs2013工程下的各个文件和文件夹的作用
1 ipch文件夹 用来加速编译,里面存放的是precompiled headers,即预编译好了的头文件. 头文件也是需要编译的,比如需要处理#ifdef,需要替换宏以及需要include其它头文件 ...
- php调用短网址接口
<?php $ch=curl_init(); curl_setopt($ch,CURLOPT_URL,"http://dwz.cn/create.php"); curl_se ...
- Webpack探索【10】--- 懒加载详解
本文主要讲懒加载方面相关内容.
- Java分支循环结构
一.Java分支结构 1.if语句:一个 if 语句包含一个布尔表达式和一条或多条语句. if 语句的用语法如下: if(布尔表达式){ 如果布尔表达式为true将执行的语句 } public c ...
- python之virtualenv 与 virtualenvwrapper 详解
在使用 Python 开发的过程中,工程一多,难免会碰到不同的工程依赖不同版本的库的问题: 亦或者是在开发过程中不想让物理环境里充斥各种各样的库,引发未来的依赖灾难. 此时,我们需要对于不同的工程使用 ...
- git常用开发流程
我们在使用git进行项目管理时,远程仓库的分支情况一般是: master分支作为稳定版分支,用于直接发布产品,dev分支则用于日常开发 备注: 也可以只有一个master分支,这里只介绍第一种情况. ...
- HTML/CSS实现的搜索框
谷歌和百度首页的搜索框都是<input>+<button>模式的,bing的搜索框感觉要好点儿.简言之,就是将提交按钮放到<input>中,其实这是做不到的,只能伪 ...