Android基础知识了解
声明:本文来自于:
http://www.cnblogs.com/tianjian/category/354587.html
http://www.cnblogs.com/tianjian/archive/2012/02/16/2354679.html
什么是Android?
Android是一个移动设备的软件栈,它包含操作系统,中间件和一些关键的应用。Android SDK提供工具和必要的API用来在Android平台上使用java程序语言来开始开发应用程序。
以上↑是官方的解释,但我们需要理解几个关键点。
1.什么是软件栈:首先栈在数据结构中大家应该都明白,它是先进后出(或者后进先出)的数据结构。软件栈就是一种这样的结构,但它里面装的不单单是数据那么简单。
Android软件栈它的最底层是Linux内核,然后中间是一些库文件,最上层则是应用程序框架(或者可以叫应用程序接口俗称API)。
2.java:开发android程序一般都是用java语言开发的,但某些特殊的情况可以用到C/C++,以后可能还会添加脚本语言也说不定。这里大家只需要了解就可以了,如果某人说
android只能用java开发,你可以完全否定他的说法。至少目前也有用C/C++开发底层来提高性能的
特性应用框架 ???????????????????? 允许组件的重用和更新(通俗来说就是符合面向对象的原则设计)Dalvik虚拟机 ??????????????????? 专为移动设备最优化而设计(以后会有详细的Dalvik虚拟机原理与参数介绍)浏览器??????????????????????????????????? 基于开源的WebKit引擎图形优化??????????? ? ? ? ? ? ? ? ? ? ?? 技术支持:一个自定义的2D图形库; 基于OpenGL ES 1.0规格的3D图形 (可选择的硬件加速功能,ES版本不仅仅只有1.0还有其他版本,以后会详细说明)SQLite?????????????????????????????????? 为数据存储服务的一个结构(SQL大家都知道把,大部分相似但不是完全一样)多媒体支持????????????????????????????? 支持一般的音频,视频和一些图片格式(MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF)支持GSM ????? ????????????? 以及附属的一些硬件支持(GSM这是属于移动电话的一种技术,了解下就行了)蓝牙, EDGE, 3G, and WiFi?????? 以及附属的一些硬件支持(EDGE是一种从GSM到3G的过渡技术,它主要是在GSM系统中采用了一种新的调制方法)摄像机, GPS, 指南针, 加速器??????以及附属的一些硬件支持丰富多样化的开发环境?????????????? 包含模拟器, 调试工具, 内存和性能概要, 和一个和基于Eclipse IDE的插件(ADT)Android 架构这就是我们上面说的软件栈的详细架构(大家可以看到底层是linux内核,中间层是库文件与运行时库文件还有虚拟机,蓝色部分我们可以看成API体系,下面讲述每个部分)

这一层包含Android一整套核心的应用,它们分别包括email客户端,短信程序,日历,地图,浏览器,联系人和其他。这里所有应用程序都是用java语言实现的。
Application FrameworkAndroid通过提供一个开源的平台让开发者开发出极为丰富和创新功能的应用程序。我们可以自由充分的利用硬件设备,访问本地信息,执行后台服务,设置闹钟,通知状态栏
,等等。
我们可以和核心应用程序(短信,日历等)使用同样的框架API。应用架构的设计可以简化组件的重用(面向对象又来咯); 任何应用程序可以发布其功能,任何其他的应用程序都可以使用这些功能(必须遵守框架的安全限制,以后会说到的权限问题)。框架中的所有内容都会让我们很方便的替换任何组件。
下面的一些内容是一套应用程序的服务和系统,它们可用于所有应用程序,了解一下它们,有个印象会对以后的学习很有帮助,它们包括:
一套丰富和可扩展的Views(请记住View这个概念,你需要显示界面就必须用到它)用来构建一个应用程序, 包含lists, grids, text boxes, buttons, 一个嵌入式的web浏览器.Content Providers:允许A应用从B,C,D应用中访问数据 (作为第三方中介), 或者共享自己的数据Resource Manager:提供非代码资源,如本地化字符串,图形,和布局文件(以后会详细描述android的资源使用与定义)Notification Manager:允许所有应用在状态栏中显示一个自定义的通知(这是一个很方便的功能)Activity Manager:管理应用的生命周期并且提供一个通用的导航回退功能(Activity是一个很重要的概念,后面会详细介绍的,留个印象)App framework简单来说是一套比较完善的框架系统,它可以很好的为我们开发应用程序来服务,google吧它开发出来的目的就是让你方便的使用它,在第二章我们将详细学习。现在还不着急!
LibrariesAndroid 有一套C/C++库文件,它被各种各样的系统组件所使用, 这些库文件越过android 应用程序框架,在它的底层并暴露了一些功能给我们使用。
以下是一些核心的库文件
System C library - 一个BSD(BSD:http://baike.baidu.com/view/209692.htm)衍生出的标准C库的实现, 使之与嵌入式基于Linux的设备相互协调Media Libraries - 基于视屏软件的开源内核;它支持目前主流音频,视频格式的播放,录音,以及静态图像文件 , 包括 MPEG4, H.264, MP3, AAC, AMR, JPG,? PNGSurface Manager - 管理访问子系统的显示和多应用无缝地整合到2D,3D。LibWebCore - 一个现代的web浏览器引擎,支持android浏览器和一个嵌入式的webViewSGL - 基于SDL的2D图形引擎(底层的东西 有兴趣的可以搜索下)3D libraries - 基于OpenGL ES 1.0API的3D库; 这个库使用3D硬件加速(如果有的话)或者使用高度优化的3D软件光栅器FreeType - 位图与矢量格式渲染SQLite - 一个强大的轻量级关系型数据库引擎Android RuntimeAndroid平台大多数核心库功能是用java语言写的。
每一个Android应用在其自己的进程中执行,并且在Dalvik虚拟机中都有一个自己的实例。一个设备能执行多个有效的虚拟机。Dalvik 虚拟机执行的是一种.dex格式的文件 。
它经过优化以让它最低限度的内存占用。虚拟机的寄存器由java语言编译器执行编译并打包到.dex格式中
Linux KernelAndroid 是以2.6版的Linux为核心的系统服务,如安全,内存管理,进程管理,网络协议栈,驱动模型 。这里的内核可以理解为一个在硬件和软件栈之间的桥梁(比较抽象的桥梁)
?
快速预览Android App由一个或者多个应用程序组件组成,它们包括 (activities, services, content providers, and broadcast receivers)在一个完整的App中每一个组件都执行一个不同的功能,并且每一个都能被单独激活(甚至由其他应用程序激活)在应用程序里manifest 文件必须声明所有组件,也要声明所有应用的需求,比如android可执行的最小版本或硬件配置无代码的应用程序资源(images, strings, layout files等) 应包括不同的设备配置方案(例如对于不同的屏幕来说会有不同的布局,对于不同语言来说会有不同的字符串)--------------------------------------------------------------------------------------
强调一下Android App是用java写的,是应用程序用java写而不是说底层库。Android SDK工具编译代码并把资源文件和数据打包到
Android包中。这个名字的扩展名是
.APK。要在android设备上运行应用程序,就把必须使用APK文件格式。一般来说编译器(如Eclipse)已经帮你直接打包好了。
每一个Android应用程序都有一个安全权限:
Android 操作系统是多用户Linux系统。你可以理解为每一个应用都有一个不同的用户默认的系统会分配每一个应用程序一个唯一的Linux 用户ID (这个ID是由系统使用的,应用程序不需知道。系统在一个应用中会对所有文件设置一个权限,因此仅靠用户ID分配的程序能访问它们每一个进程都有一个自己的虚拟机(这个概念很重要,要记住),所以一个应用程序的代码执行会与其他应用隔离开默认的, 每一个应用程序在它自己的Linux进程中执行。当任何一个应用程序的组件需要被执行时,就会开始一个进程,当长时间不需要或者系统必须为其他应用回收内存时将会关闭这个进程
Android 系统使用最小权限原则。就是说每一个应用,默认的,每一个组件只做它力所能及的事情。这创造了一个非常安全的环境,一
个应用程序在没有获得权限的情况下无法进入
系统的一部分。然而, 有一些方法能让一个APP共享其他的APP的数据并访问系统服务:
系统很可能安排2个App共享同一个Linux用户ID。这种情况下,它们能彼此访问各自的文件。用来节约系统资源,在同一个Linux进程中App使用同 样的用户ID,能共享同一个虚拟机(前面不是说一个进程运行在一个虚拟机吗,这里是说2个APP只要在一个进程中就可以共享同一个虚拟机)App请求权限访问设备数据比如用户通讯录,短信,SD卡,摄像头,蓝牙。所有应用权限在用户安装App时,必须用户允许了才会生效关于怎样让一个Android App在系统中出现,以下是概述可以稍微预览下:
在你的App中定义核心框架组件(什么是核心组件?请看Application 资源Android app的组成不仅仅是代码,资源也许占用的比例更多。所以我们应该更好的区别资源。放心,Android已经有一套机制,以后我们写代码的时候会详细描述。例如动画,菜单,风格,颜色和布局文件都是使用XML文件的。这样会更容易更新你的App资源,而且不需要修改代码。为你优化多种不同的设备提供多样化的选择(比如不同的语言和屏幕大小)
每一种资源就包含在你的工程项目中,每一个资源都会有一个唯一的int ID,你可以直接引用。一般ID 定义在XML文件中或者用代码设置一个ID。比如你的图片名字叫logo.png。那么你的资源ID为R.drawable.logo。直接引用就行了(现在不明白的没关系,以后会讲述)
比如字符串,如果你要支持多国语言就可以分别在不同的文件夹中定义,res/values-fr/这就是法语,res/values-cn/国语。Android系统会根据你设备正使用的语言来自动引用文件夹
Android 支持许多不同的 后缀修饰。(上面的-fr,-cn就是后缀修饰)。修饰一般是缩写。 还有关于横竖屏的不同支持也有相应的后缀,以后我们会说的!
好了,看完这么长长的一章,在总结一下上面的内容
1.android权限
2.四大组件(activities, services, content providers, and broadcast receivers)
3.很重要的intent
4.Manifest 文件
5.设备的一些重要特性
6.android的资源是怎样使用和适配的