Android应用开发简介
Android应用开发简介
Android应用开发简介
Android应用开发简介
Android应用开发简介
Android应用开发简介
Android应用开发简介
Android应用开发简介
Android应用开发简介
Android应用开发简介
Android应用开发简介
Android应用开发简介
Android应用开发简介
Android应用开发简介
Android应用开发简介
Android应用开发简介
Android应用开发简介
Android应用开发简介
Android应用开发简介
Android应用开发简介
Android应用开发简介
Android应用开发简介
Android应用开发简介
Android应用开发简介
Android应用开发简介
Android应用开发简介
Android应用开发简介
Android应用开发简介
Android应用开发简介
Android应用开发简介
Android应用开发简介
Android应用开发简介
Android应用开发简介
Android应用开发简介
Android应用开发简介
Android应用开发简介
Android应用开发简介
Android应用开发简介
Android应用开发简介
Android应用开发简介
Android应用开发简介
Android应用开发简介
Android应用开发简介
Android应用开发简介
Android应用开发简介
Android应用开发简介
Android应用开发简介
Android应用开发简介
Upcoming SlideShare
Loading in …5
×

Android应用开发简介

25,563 views

Published on

sina cloud 每周分享 liubo同学提供

Published in: Technology
1 Comment
4 Likes
Statistics
Notes
No Downloads
Views
Total views
25,563
On SlideShare
0
From Embeds
0
Number of Embeds
16,081
Actions
Shares
0
Downloads
135
Comments
1
Likes
4
Embeds 0
No embeds

No notes for slide
  • Android 框架分为四层: kernel 、 libraries 、 framework 、 applications 1. 最低层是 linux kernel ,主要负责内存管理、进程调度等系统管理以及终端的硬件驱动。 Binder driver , google 为 android 设计的一个增强系统的进程间通信能力的模块。 2. Kernel 的上一层是 libraries ,包含了核心库、第三方库和 android 虚拟机。 android 并没有直接采用传统的 j2se 或 j2me 的 java 虚拟机,而是自己建立了一个称为 dalvik 的虚拟机,号称更节省字节码的空间,性能更好。但这也成为了 google 与 sun 关于 java 版权争议点。 以上两层是采用 C 语言或汇编语言实现的。 3. Framework 是 android 为应用开发者设计的一套软件框架,提供了丰富的 api 和一些现成的开发元素。 Framework 是采用 java 语言实现的。在 NDK 出来之前, android 应用开发者基本上只能用 java 来开发应用。 Android 使用 JNI( Java Native Interface ) 连接了 libraries 和 framework 。 4. Application 就是在 framework 的基础上开发的各种应用。 以上是 android 系统的总体框架。
  • res/drawable 专门存放 png 、 jpg 等图标文件。在代码中使用 getResources().getDrawable(resourceId) 获取该目录下的资源。 res/layout 专门存放 xml 界面文件, xml 界面文件和 HTML 文件一样,主要用于显示用户操作界面。 res/values 专门存放应用使用到的各种类型数据。不同类型的数据存放在不同的文件中,如下: · strings.xml 定义字符串和数值,在 Activity 中使用 getResources().getString(resourceId) 或 getResources().getText(resourceId) 取得资源。它的作用和 struts 中的国际化资源文件一样。 <?xml version="1.0" encoding="UTF-8"?> <resources> <string name=“itcast”>****</string> </resources> · arrays.xml 定义数组。 <?xml version="1.0" encoding="utf-8"?> <resources> <string-array name="colors"> <item>red</item> <item>yellow</item> <item>green</item> <item>blue</item> </string-array> </resources> · colors.xml 定义颜色和颜色字串数值,你可以在 Activity 中使用 getResources().getDrawable(resourceId) 以及 getResources().getColor(resourceId) 取得这些资源。例子如下: <?xml version="1.0" encoding="UTF-8"?> <resources> <color name="contents_text">#ff000000</color> </resources> · dimens.xml 定义尺寸数据,在 Activity 中使用 getResources().getDimension(resourceId) 取得这些资源 <?xml version="1.0" encoding="UTF-8"?> <resources> <dimen name="key_height">50dip</dimen> </resources> · styles.xml 定义样式。 <?xml version="1.0" encoding="utf-8"?> <resources> <style name="itcastText" parent="@style/Text"> <item name="android:textSize">18px</item> <item name="android:textColor">#008</item> </style> </resources> res/anim/ 编译成帧动画的 XML 文件。 res/xml/ 在 Activity 中使用 getResources().getXML() 读取该目录下的 XML 资源文件。 res/raw/ 该目录下的文件将直接被复制到设备上。编译软件时,这些数据不会被编译,它们被直接加入到程序安装包里。 为了在程序中使用这些资源,你可以调用 getResources().openRawResource(ID) , 参数 ID 形式: R.raw. somefilename 。
  • 下面具体看看一个 android 应用程序的框架。 包含了 5 个部分: activity , service , intent , broadcast receiver , content provider
  • 当 activity 处于 pause 或者 stop 状态时,都可能被系统终止并回收。因此,有必要在 onPause 和 onStop 方法中将应用程序运行过程中的一些状态,例如用户输入等,保存到持久存储中。如果程序中启动了其他后台线程,也需要注意在这些方法中进行一些处理,例如在线程中打开了一个进度条对话框,如果不在 pause 或 stop 中 cancel 掉线程,则当线程运行完 cancel 掉对话框时就会抛出异常。 Project : ActivityLifecycle
  • Intent 可以理解为应用程序向系统表达的一种意愿 : 希望系统做什么。 一个 Activity 可以通过 intent 来启动另外的 activity 或 service 实例,或者通过 intent 来发起一个广播。 Service 可以通过 intent 来启动一个 activity 或另一个 service 实例,也可以通过 intent 发起一个广播。 Broadcast receiver 通过获取 intent 取得其关注的广播消息。
  • 显式的,应用程序向系统发出 intent ,指明需要哪一个 component 处理。 隐式的,应用程序向系统发出一个 intent ,但没有具体指明该 intent 的接收者,由系统匹配最合适的接收者负责处理。如果存在多个匹配,那么系统会弹出对话框给用户选择处理的应用。 系统如何知道哪些 component 可以处理哪些 intent ?在 androidmanifest.xml 文件中定义 intent-filter
  • Filter 分三类, action 、 category 、 data 在 filter 中定义相关的匹配规则,告知系统对应的 component 可以接受哪些 intent
  • ACTION_CALL 拨出 Data 里指定的电话号码 ACTION_EDIT 打开编辑 Data 里指定数据相对应的应用程序 ACTION_MAIN 主程序入口,不会接收数据,结束后也不返回数据 ACTION_SYNC 在 Android 平台和服务器之间同步数据 ACTION_VIEW 根据 Data 类型的不同,打开相对应的应用程序以显示数据 ACTION_DIAL 启动 Dialer 或其他拨号程序,并显示 Data 里指定的电话号码 ACTION_SENDTO 向 Data 里描述的目标地址发送数据 ACTION_TIME_TICK 系统时间每过一分钟发出的广播 ACTION_TIME_CHANGED 系统时间通过设置发生了变化 ACTION_TIMEZONE_CHANGED 时区改变 ACTION_BOOT_COMPLETED 系统启动完毕 ACTION_PACKAGE_ADDED 新的应用程序 apk 包安装完毕 ACTION_PACKAGE_CHANGED 现有应用程序 apk 包改变 ACTION_PACKAGE_REMOVED 现有应用程序 apk 包被删除 ACTION_UID_REMOVED 用户 id 被删除
  • 一个 service 也有其生命周期,从创建到启动,到最后的撤销。 上一页 ppt 提到两种创建 service 的方法, startService 或者 bindService ,他们的区别就在于, startService 是创建并启动 service ,而 bindService 只是创建了一个 service 实例并取得了一个与该 service 关联的 binder 对象,但没有启动它。 Project: local service controller
  • 在 android 中,系统对资源和数据的管理机制是这样的: 每一个应用的资源是私有的,如果应用本身没有开放这些资源,其他应用是无法访问到这些资源的。 Android 通过将每一个应用视为一个 linux 用户来实现这一机制。 那么,如果一个应用希望它所拥有的资源和数据可以被其他应用使用,那么就需要通过 content provider 来对外提供访问接口。
  • 如何使用 content provider ? Android 使用了 content resolver 和 uri 数据表示方式,提供对 content provider 的统一访问。 应用在使用 content resolver 访问需要的数据时,系统 content resolver 根据传入的 uri ,定位到该 uri 对应的 content provider ,完成相应的操作。 Content provider 提供了一种类似于数据库二维表的数据展现和访问方式。 从图中也可以看到,一个 content provider 被注册之后,它就可以被所有的应用通过 content resolver 访问了。
  • Content resolver 如何定位具体要访问哪个 content provider 呢? Android 使用 uri 来定位资源,即 content resolver 依靠 uri 来找到要访问的 content provider 。 两个例子:通信录联系人的 uri ,第二个是通话记录的 uri 。 Android 提供了一种类似数据库访问的方式来使用 content resolver ,并且以二维表的形式表现访问的数据。
  • Preference 提供了一种轻量级的存取机制,主要是可以通过关键字读取和存储某个 Preference value, 比如载系统启动的时候得到上次系统退出时候保存的值。 File 机制你可以直接存储一个文件到你手机文件系统路径比如 SD 卡中 Network 通过网络来存储数据,使用下面两个包的 java class. java.net.*    android.net.* 
  • Android 在接收到一个广播 intent 之后,找到了处理该 intent 的 broadcast receiver ,创建一个对象来处理 intent 。 然后,调用被创建的 broadcast receiver 对象的 onReceive 方法进行处理,然后就撤销这个对象。 需要注意的是,对象在 onReceive 方法返回之后就被撤销,所以在 onReceive 方法中不宜处理异步的过程。
  • 有时候我们的应用需要使用一些系统提供的能力,例如拨打电话,接收短信等。这时我们就需要向系统申请使用这些能力的权限了。 android 通过在 androidmanifest 文件中申明一系列的 <uses-permission> 来向应用程序开放指定的权限。
  • ×