E N D
Outline • Android 简介 • Android 系统架构 • Android 应用开发调试 • Android 主要组件介绍
Outline • Android 简介 • Android 系统架构 • Android 应用开发调试 • Android 主要组件介绍
Android大事件 • 2003年10月,Andy Rubin等人组建Android团队。 • 2005年8月17日,Google低调收购了成立仅22个月的高科技企业Android及其团队。 • 2007年11月5日,组建开放手持设备联盟(Open Handset Alliance): 84家硬件制造商、软件开发商及电信营运商,以Apache开源许可证的授权方式,发布了Android的源代码。 • 2008年10月, 第一部Android智能手机发布。 • 2011年第一季度,Android在全球的市场份额首次超过塞班系统,跃居全球第一。 • 2012年11月数据显示,Android占据全球智能手机操作系统市场76%的份额,中国市场占有率为90%。
Android 版本 • Android 1.5 Cupcake • Android 1.6 Donut • Android2.0/2.0.1/2.1 Eclair • Android 2.2/2.2.1 Froyo • Android 2.3 Gingerbread • Android 3.0-3.2 Honeycomb • Android 4.0/4.0.3Ice Cream Sandwich • Android 4.1/4.2 Jelly bean • Android 5.0 Key lime pie
Outline • Android 简介 • Android 系统架构 • Android 应用开发调试 • Android 主要组件介绍
Android架构 • Linux Kernel: • Android的核心系统服务依赖于Linux2.6内核,包括安全性、内存管理、进程管理、网络协议栈和驱动模型。 • 隐藏了硬件、网络等相关的细节,为上层提供了一个统一接口。 • 通过HAL接口,分离 framework开发对不同硬件驱动的依赖 • Android的底层实现具备超强的可移植性
Android架构 • Android Runtime: • Dalvik虚拟机,Android的Java虚拟机 • Java基础库 • 为上层JAVA程序提供服务 • 核心的和扩展的类库 • 本地的C/C++实现。 • 开源的SQLite、WebKit、OpenGL • 上层函数调用该层类库必须要通过JNI的导出相应的接口函数
Android架构 • 框架层 • 所有开发所用的SDK类库 • 一些未公开接口的类库和实现 • 整个Android平台核心机制的体现
Android架构 • 应用层 • 系统应用 • 第三方开发的所有应用 • 两者差别,就是系统应用会用一些隐藏的类,而第三方的应用,总是基于SDK提供的类
Outline • Android 简介 • Android 系统架构 • Android 应用开发调试 • Android 主要组件介绍
开发环境准备 • JDK下载 • http://www.oracle.com/technetwork/java/javase/downloads/index.html • Eclips, Android SDK,ADT 下载: • http://developer.android.com/sdk/index.html • Eclips->windows->perference->android
简单示例demo • ADT提供了一个新的工程向导,你可以快速的创建一个新的工程或者在现有代码上创建工程。创建工程的步骤如下: • 选择File > New > Project 选择 Android > Android Project, 然后按下 Next • 选择项目内容: • 选择 Create new project in workspace, 为编码创建一个全新的工程。 输入工程名称(project name),基础软件包的名称(the base package name),以及Activity 类的名称。 • 选择Create project from existing source ,为已有代码创建一个工程。如果你想编译运行SDK中提供的示例程序,可以使用这个选项。示例程序的存放在SDK的samples/目录下。 浏览包含已有代码的目录,点击ok,如果目录中包含有可用的android manifest 文件,ADT将为你填写合适的软件包,activity,和应用程序名称。 • 按下Finish. • ADT插件会根据你的工程类型创建合适的文件和文件夹,如下: • src/ 包含stub .java Activity文件的文件夹. • res/ 资源文件夹. • AndroidManifest.xml 工程清单.
和Java项目结构相同src文件夹是项目的所有包及源文件(.java)和Java项目结构相同src文件夹是项目的所有包及源文件(.java) R.java是在建立项目时自动生成的,这个文件是只读模式,不能更改,R.java文件是定义该项目所有资源的索引文件。 res文件夹中则包含了项目中的所有资源,比如:程序图标(drawable)、布局文件(layout)、常量(values)等。 AndroidManfest.xml文件则包含了该项目中所使用的Activity、Service、Receiver等。
DDMS 使用 1. DDMS的简介: • DDMS 的全称是Dalvik Debug Monitor Service • 作用:Debug、为测试设备截屏,针对特定的进程查看正在运行的线程以及堆信息、Logcat、广播状态信息、模拟电话呼叫、接收SMS、虚拟地理坐标等等 • 安装好ADT后会有一个DDMS的perspective
DDMS的使用——Debug 在坐上角的Devices中,选中要Debug的工程,然后点击 图标, 这样便可以进入Debug模式
DDMS的使用emulator control • emulator control也是非常重要的,通过它可以像手机发送短信, 打电话,更新手机位置信息。 • Telephony Status: 通过选项模拟语音质量以及信号连接模式。 • Telephony Actions: 模拟电话接听和发送SMS到测试终端。 • Location Control: 模拟地理坐标或者模拟动态的路线坐标变化并显示预设的地理标识,可以通过以下3种方式: • Manual: 手动为终端发送二维经纬坐标。 • GPX: 通过GPX文件导入序列动态变化地理坐标,从而模拟行进中GPS变化的数值。 • KML: 通过KML文件导入独特的地理标识,并以动态形式根据变化的地理坐标显示在测 试终端
DDMS的使用—信息查看 • 右边窗口中有threads, heap , file explorer选项卡。分别显示线程统计信息,栈信息,以及android的文件系统。 • file explorer非常有用,他可以把文件上传到android手机,或者从手机下载下来,也可以进行删除操作。 • 选中file explorer选项卡后,按下面三个按钮便可实现对android手机文件系统的上传,下载,删除操作。
Outline • Android 简介 • Android 系统架构 • Android 应用开发调试 • Android 主要组件介绍
Android 进程管理 • Android系统会尽可能长的延续一个应用程序进程,但在内存过低的时候,仍然会不可避免需要移除旧的进程。为决定保留或移除一个进程,Android 将每个进程都放入一个“重要性层次”中,依据则是它其中运行着的组件及其状态。重要性最低的进程首先被消灭,然后是较低的,依此类推。 • 前台进程 • 可视进程 • 服务进程 • 背景进程 • 空进程
Android 四大组件 • Activity • Service • BroadcastReceiver • Content Provider
Activity: 每个activity都要继承android.app.Activity类, 并重写其中的某些方法 onCreate() onStart() onResume() onPause() onStop() onDestroy() onSaveInstanceState(Bundle) onRestoreInstanceState(Bundle) Activity
Android will display the ANR dialog when: No response to an input event (such as key press or screen touch events) within 5 seconds. A BroadcastReceiver hasn't finished executing within 10 seconds. In order to avoid ANR and keep your App responsive, the time-consuming operations should run in a new thread : AsyncTask , thread/handler/looper Activity
Service • Service • perform long-running operations in the background and does not provide a user interface,ex:play music. • start/stopService • bind/unbindService
Service • Service killed by system? • Not kill:Running a Service in the Foreground • startForeground() and stopForeground() • Restart service : • onStartCommand() • START_NOT_STICKY/START_STICKY/START_REDELIVER_INTENT
BroadcastReceiver • BroadcastReceiver: • receive intents sent by sendBroadcast(). ex:incoming call, sms, battery change • 2种监听方式: • 程序中动态注册registerReceiver/unregisterReceiver • AndroidManifest.xml中注册 • 生命周期只有十秒左右,如果在 onReceive() 内做超过十秒内的事情,就会报ANR(Application No Response) • 如果需要完成一项比较耗时的工作 , 应该通过发送 Intent 给 Service, 由Service 来完成 ,不能使用子线程来解决
Content Provider • 结构化数据,统一数据访问方式,实现不同应用间数据共享. Ex:联系人 • Content provider提供共享数据, 通过ContentResolver来跟provider的一个实例进行交互。 • 每个contentprovider定义一个唯一的公开的URI,用于指定到它的数据集。一个contentprovider可以包含多个数据集,需要有多个URI与每个数据集对应。URI 格式 : content:// • 通过 Query, insert,update,retrieve, delete 来进行数据的查询修改。
Content Provider 创建ContentProvider共享数据,继承ContentProvider并重写下面方法: public class PersonContentProvider extends ContentProvider{ public booleanonCreate() public Uri insert(Uri uri, ContentValues values) public int delete(Uri uri, String selection, String[] selectionArgs) public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) public String getType(Uri uri)} AndroidManifest.xml使用<provider>对该ContentProvider进行配置,为了能让其他应用找到该ContentProvider , ContentProvider采用了authorities(主机名/域名)对它进行唯一标识: <manifest .... > <application android:icon="@drawable/icon" android:label="@string/app_name"> <provider android:name=".PersonContentProvider" android:authorities="cn.itcast.providers.personprovider"/> </application> </manifest>
Intent andIntent Filters • Intent: an abstract description of an action to be performed. • startActivity()来启动一个activity, • 由broadcast Intent()来传递给所有感兴趣的BroadcaseReceiver, • startService()/bindservice()来启动一个service • Intent组成 : • action,data • other parts: category/type/component/extras • IntentFilter : An IntentFilter can match against actions, categories, and data (either via its type, scheme, and/or path) in an Intent.
其他开发组件 • UI: • Button,textview,listview , xxxLayout… • Input event: • TouchEvent,KeyDown,multi-touch … • System service: • Location service,telephony service,sensor service, wifi service, usb service … • http://developer.android.com/index.html