Android概述
Android是什么
Android是一种以Linux为基础的开放源码操作系统和应用程序,主要使用于便携设备。
Android操作系统最初由Andy Rubin开发,最初主要支持手机。
2005年由Google收购注资,并组建开放手机联盟开发改良,逐渐扩展到平板电脑及其他领域上。
2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。
2011年11月数据,Android占据全球智能手机操作系统市场52.5%的份额,中国市场占有率为58%。
Android名称来源
Android一词最早出现于法国作家利尔亚当(Auguste Villiers de l'Isle-Adam)在1886年发表的科幻小说《未来夏娃》(L'ève future)中。他将外表像人的机器起名Android。
Android的版本
android1.1
…
android4.0
android4.1
...
Android开发方向
系统开发
扩展操作系统功能 比较高难 ,android底层使用c c++开发。从事android系统开发,除了对java需要有深入的了解和开发经验,还需要对c 和c++有深入了解和足够的开发经验
应用开发
开发应用程序 难度一般
Android的系统架构
应用层
应用是用Java语言编写的运行在虚拟机上的程序。
应用框架层
这一层是编写Google发布的核心应用时所使用的API框架,开发人员同样可以使用这些框架开发自己的应用,这样便简化了程序开发的框架设计,但是必须遵守其框架的开发原则。
系统运行库层
当使用Android应用框架时,Android系统会通过一些C/C++库来支持我们使用的各个组件,使其能更好的为我们服务。
Linux 内核层
Android的核心系统服务于Linux2.6内核,如安全性、内存管理、进程管理、网络协议栈和驱动模型等都依赖于该内核。Linux内核同时也作为硬件和软件栈之间的抽象层。
开发环境搭建
这里主要说下Eclipse下开发的环境搭建,官方现在推荐Android Studio ,关于Android Studio 我也是刚开始接触,我会把遇到的问题总结出来,以后以博文的形式进行分享。
Android开发准备工作
所需软件:
JDK 1.5或更高(推荐使用JDK1.6版本) 、Eclipse3.5或更高(推荐使用3.7版本) 、Android SDKAndroid SDK
4.0.3 、ADTADT 20.0.2
Android开发环境搭建
安装SDK
SDK是Android开发工具包,包含开发Android应用程序的API
SDK需要JDK1.5及以上的版本支持 安装SDK前需要先安装JDK
SDK的官方下载地址:
http://developer.android.com/sdk/index.html
下载后双击安装即可
安装后的SDK只是一个SDK版本的管理器,点击SDK Manager,里面管理的是android SDK也就是android系统的版本
勾选点击Install Packages即可对应下载
android版本:
1.X 较早手机版本 2.X 主流手机版本 3.X 平板电脑版本 4.X 为2.X与3.X整合版 ,即可手机使用,也可平板使用
配置SDK的环境变量
找到SDK的安装路径
打开tools文件夹
添加到环境变量path里
打开platform-form-tools文件夹
一样的道理,把路径复制好后,加入环境变量path里
安装ADT插件
ADT
使用eclipse并不能直接使用SDK开发android应用程序,这就需要添加eclipse对SDK的支持,也就是,eclipse需要插件来支持SDK
这个插件就是--ADT
下载ADT
下载ADT插件,ADT插件的版本号一定要与下载的SDK版本号一致
启动Eclipse,“Help”→“Install New Software..”→“add” 指定ADT所在路径即可,单击OK
点击finish完成安装,若出现如下图所示警告,单击OK继续安装即可
出现如下提示,则安装成功,重启eclipse
若工具栏出现android图标,即插件安装成功
在eclipse中配置SDK
点击Windows→Preferences→android
创建AVD(模拟器)
AVD
AVD的全称为:Android Virtual Device,就是Android运行的虚拟设备,即模拟手机。
创建AVD
点击图标
点击Create AVD
点击start 出现如下窗口 点击Launch启动模拟器
启动成功后会看到一个模拟手机的画面
第一个HelloWorld程序
创建一个Android项目
连续点击下一步 直到完成按钮可以点击
运行程序
点击项目右键
运行结果
Android项目的目录结构
gen:
当向res文件夹内添加资源时,会在R.java内自动生成,代表添加资源的变量,通过访问变量(即R.变量名),直接可以访问资源。如下图:当向drawable-hdpi内添加图片a.JPG,则R类自动添加代表a.JPG的变量
res:
Android组件
Activity(活动):
活动是最基本的Android应用程序组件,应用程序中,一个活动通常就是一个单独的屏幕。每一个活动都被实现为一个独立的类,并且从活动基类中继承而来,活动类将会显示由视图控件组成的用户接口,并对事件做出响应。大多数的应用是由多个屏幕显示组成。例如:一个文本信息的应用也许有一个显示发送消息的联系人列表屏幕,第二个屏幕用来写文本消息和选择收件人,再来一个屏幕查看消息历史或者消息设置操作 等。这里每一个这样的屏幕就是一个活动,很容易实现从一个屏幕到一个新的屏幕并且完成新的活动。在某些情况下当前的屏幕也许需要向上一个屏幕活动提供返回值--比如让用户从手机中挑选一张照片返回通讯录做为电话拨入者的头像。
当一个新的屏幕打开后,前一个屏幕将会暂停,并保存在历史堆栈中。用户可以返回到历史堆栈中的前一个屏幕。当屏幕不再使用时,还可以从历史堆栈中删除。默认情况下,Android将会保留从主屏幕到每一个应用的运行屏幕。
简单理解Activity代表一个用户所能看到的屏幕,Activity主要是处理一个应用的整体性工作,例如,监听系统事件(按键事件、触摸屏事件等)、为用户显示指定的View,启动其他Activity等。所有应用的Activity都继承于android.app.Activity类,该类是Android提供的基层类,其他的Activity继承该父类后,通过Override父类的方法来实现各种功能,这种设计在其他领域也较为常见。
Service(服务):
一个Service是一段长生命周期的,没有用户界面的程序。比较好的一个例子就是一个正在从播放列表中播放歌曲的媒体播放器。在一个媒体播放器的应用中,应该会有多个activity,让使用者可以选择歌曲并播放歌曲。然而,音乐重放这个功能并没有对应的activity,因为使用者当然会认为在导航到其它屏幕时音乐应该还在播放的。在这个例子中,媒体播放器这个activity会使用Context.startService()来启动一个service,从而可以在后台保持音乐的播放。同时,系统也将保持这个service一直执行,直到这个service运行结束。另外我们还可以通过使用Context.bindService()方法,连接到一个service上(如果这个service还没有运行将启动它)。当连接到一个service之后,我们还可以service提供的接口与它进行通讯。拿媒体播放器这个例子来说我们还可以进行暂停、重播等操作。
ContentProvider(内容提供者):
Android应用程序能够将它们的数据保存到文件、SQLite数据库中,甚至是任何有效的设备中。当你想将你的应用数据与其它的应用共享时,内容提供器就可以发挥作用了。因为内容提供器类实现了一组标准的方法,从而能够让其它的应用保存或读取此内容提供器处理的各种数据类型。 数据是应用的核心。在Android中,默认使用鼎鼎大名的SQLite作为系统DB。但是在Android中,使用方法有点小小的不一样。在Android中每一个应用都运行在各自的进程中,当你的应用需要访问其他应用的数据时,也就需要数据在不同的虚拟机之间传递,这样的情况操作起来可能有些困难(正常情况下,你不能读取其他的应用的db文件),ContentProvider正是用来解决在不同的应用包之间共享数据的工具。
BroadcastReceiver(广播接收者):
一个广播接收者是这样一个组件,它不做什么事,仅是接受广播公告并作出相应的反应。许多广播源自于系统代码,例如公告时区的改变、电池电量低、已采取图片、用户改变了语言偏好。应用程序也可以发起广播,例如为了他其他程序知道某些数据已经下载到设备且他们可以使用这些数据。一个应用程序可以有任意数量的广播接收者去反应任何它认为重要的公告。所有的接受者继承自BroadcastReceiver基类。Android 中的广播要么来自于系统,要么来自普通应用程序。很多事件都可能导致系统广播,如手机所在时区发生变化,电池电量低,用户改变系统语言设置等。来自普通应用程序,如一个应用程序通知其他应用程序某些数据已经下载完毕。
为了响应不同的事件通知,应用程序可以注册不同的 Broadcast Receiver 。所有的 Broadcast Receiver都继承自基类 BroadcastReceiver 。BroadcastReceiver 自身并不实现图形用户界面,但是当它收到某个通知后, BroadcastReceiver 可以启动Activity 作为响应,或者通过 NotificationMananger 提醒用户。BroadcastReceiver 是对发送出来的 Broadcast 进行过滤接收并响应的一类组件。
Intent(意图):
Android使用了Intent这个特殊类,实现在屏幕与屏幕之间移动。Intent类用于描述一个应用将会做什么事。在Intent的描述结构中,有两个最重要的部分:动作和动作对应的数据。典型的动作类型有:MAIN(activity的门户)、VIEW、PICK、EDIT等。而动作对应的数据则以URI的形式进行表示。例如:要查看一个人的联系方式,你需要创建一个动作类型为VIEW的intent,以及一个表示这个人的URI。与之有关系的一个类叫IntentFilter。相对于intent是一个有效的做某事的请求,一个intentfilter则用于描述一个activity(或者IntentReceiver)能够操作哪些intent。一个activity如果要显示一个人的联系方式时,需要声明一个IntentFilter,这个IntentFilter要知道怎么去处理VIEW动作和表示一个人的URI。IntentFilter需要在AndroidManifest.xml中定义。通过解析各种intent,从一个屏幕导航到另一个屏幕是很简单的。当向前导航时,activity将会调用 startActivity(IntentmyIntent)方法。然后,系统会在所有安装的应用程序中定义的IntentFilter中查找,找到最匹配myIntent的Intent对应的activity。新的activity接收到myIntent的通知后,开始运行。当startActivity方法被调用将触发解析myIntent的动作,这个机制提供了两个关键好处:
A、Activities能够重复利用从其它组件中以Intent的形式产生的一个请求。
B、Activities可以在任何时候被一个具有相同IntentFilter的新的Activity取代。
ps:csdn编辑器写博客太麻烦了,尤其是排版上,还好现在支持markdown语法了。还是希望能将精力更多集中在内容上,而不是排版上,markdown解决了这个问题。