




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Android基础知识详解
wuliming
wuliming_sc@
wuliming_sc@
QQ:44384992
2010.08
参考书目
相关书籍推荐(Android)
AndroidAndroid
应用开发揭秘系统原理及开发要点详解
MH99.■
目录
参考书目2
目录3
Android的系统架构6
•、应用程序6
二、应用程序框架6
三、AndroidRuntime7
四、系统库7
五、Linux内核8
Webkit浏览器引擎简介9
Dalvik虚拟机简介11
什么是Dalvik虚拟机11
Dalvik和Android系统11
Dalvik虚拟机的主要特征12
Android应用开发和Dalvik虚拟机14
Activity生命周期16
一、Activity^戋16
二、Activity的4种状态16
三、Activity的生命周期17
四、实例说明18
Android控件的继承关系22
一、View与ViewGroup关系22
二、各控件的继承关系23
界面布局25
LinearLayout(线性布局)25
TableLayout(表格布局)28
RelativeLayout(相对布局)31
AbsoluteLayout(绝对布局)33
FrameLayout(框架布局)34
Toast35
Notification37
对话框41
一、带三个按钮的对话框41
二、简单列表对话框、单选列表对话框、多选列表对话框42
三、水平进度对话框和圆形进度对话框46
四、自定义对话框48
Menu菜单51
选项菜单51
上下文菜单52
三、子菜单53
4种响应菜单项单击事件的方式55
显示和编辑文本的控件56
TextView56
CheckedTextView59
EditText59
ExtraEditText60
AutoComplteteTextView^MuItiAutoCompleteTextView(自动完成输入内容)60
Button62
ImageButton63
ZoomButton64
日期和时间控件64
DatePicker>TimePicker64
AnalogClock>DigitalClock66
单选框、复选框、开关状态按钮67
单项选择(RadioGroup、RadioButton)67
复选框(CheckBox)69
开关状态按钮(ToggleButton)71
下拉列表框Spinner72
ScrollViewNHorizontalScrollView75
垂直滚动(ScrollView)75
水平滚动(HorizontalScrollView)76
两个方向均可滚动76
TabHost77
ProgressBar>SeekBar、RatingBar79
进度条(ProgressBar)79
拖动条(SeekBar)81
评分组件(RatingBar)84
GridView^Gallery和ImageSwitcher86
GridView86
Gallery和ImageSwitcher89
ListView92
一、普通的ListView92
可以单选和多选的ListView94
使用SimpleAdapter建立复杂的列表项96
自定义Adapter来建立复杂的列表项98
动态添加、删除ListView列表项101
改变ListView列表项选中状态的背景颜色101
可展开的列表组件101
数据的存取102
SharePreferences6.1102
文件的存储6.2102
SQLite数据库6.4102
ContentProvider>ContentResolver6.5104
Intent105
用Intent启动Activity,并在Activity之间传递数据105
调用其他应用程序中的Activity(打电话、浏览网页、发Email等)108
接收和发送广播112
接收系统广播112
在自己的应用程序中发送广播116
Android服务117
系统服务8.2117
时间服务8.3117
跨进程访问8.4117
网络118
图形、音频、视频119
图形10.1119
音频、视频10.2119
2D动画120
帧动画120
补间动画120
OpenGLES编程121
Android支持的各种资源122
窗口小部件(AppWidget)123
NDK编程124
Android的系统架构
Android的系统架构和其操作系统一样,采用了分层的架构。从架构图看,android分为四个层,从上层到低层分别是应用程
序层、应用程序框架层、Android运行时和库、linux内核:
APPLICATIONS
HomeContactsPhoneBrowser
APPLICATIONFRAMEWORK
WindowContentView
ActivityManager
ManagerProvidersSystem
TelephonyResourceLocationNotificabon
PackageManager
ManagerManagerManagerManager
LIBRARIESANDROIDRUNTIME
.Media
SurfaceManagerSQLiteCoreLibraries
Framework
DaMkVirtua!
OpenGL|ESFreeTypeWebKit
Machine
LINUXKERNEL.
DisplayCameraDriverFlishMemoryBinder(IPC)
DriverDriver
AudioPower
KeypadDriverWiFiDriver
DriversManagement
一、应用程序
Android会同一系列核心应用程序包一起发布,该应用程序包包括电子邮件,短信,日历,地图,浏览器,联系人管理程序
等。所有的应用程序都是使用JAVA语言编写的。当然,你也可以自己用自己编写的应用程序来替换Android提供的应用程
序。
二、应用程序框架
应用程序框架是我们进行Android开发的基础,开发人员大部分情况下也是在和应用程序框架层打交道。应用程序框架层包
括了活动管理器、窗口管理器、内容提供器、视图系统、包管理器、电话管理器、资源管理器、位置管理器、通知管理器九
大部分,如上图所示。各部分的具体功能如下:
活动管理器(ActivityManager):活动管理器用来管理应用程序生命周期并提供常用的导航回退功能
窗口管理器(WindowManager):管理所有的窗口程序
内容提供器(ContentProviders):内容提供器使得应用程序可以访问另一个应用程序的数据,或者共享出它自己的数据
视图系统(ViewSystem):丰富而又可扩展的各种视图,是构建应用程序的基本组件。它包括列表,网格,文本框,按钮,
甚至是可嵌入的web浏览器等等
包管理器(PackageManager):Android系统内的程序管理
电话管理器(TelephonyManager):用来管理所有的移动设备的功能
资源管理器(ResourceManager):提供各种资源让应用程序去使用,比如本地化字符串、图片、布局文件、视频文件等等
位置管理器(LocationManager):用来提供位置服务
通知管理器(NotifcationManager):使应用程序可以在状态栏中显示警告信息。状态栏通常在手机的顶部,短信、邮件等的
提示信息就会出现在这里
在Android平台上,开发人员可以完全访问核心应用程序所使用的API框架。并且,任何一个应用程序都可以发布自身的功
能模块,而其他应用程序则可以使用这些已发布的功能模块。基于这样的重用机制,用户就可以方便地替换平台本身的各种
应用程序组件。
三、AndroidRuntime
Android运行时包括核心库和Dalvik虚拟机两部分,这两部分的具体功能如下所示:
核心库:核心库包含两部分内容:一部分为绝大多数java语言所需要调用的功能函数,另一部分为Android的核心库,比如
android.os、、android.media等等。与标准java不一样的是,每个Android应用程序都有一个自有的进程,Android
不是用一个Dalvik虚拟机来同时执行多个Android应用程序,而是每个Android应用程序都用一个自有的Dalvik虚拟机来执
行。
Dalvik虚拟机:Dalvik是一种基于寄存器的java虚拟机,Dalvik虚拟机主要是完成对象生命周期的管理,堆栈的管理,线程
管理,安全和异常的管理,以及垃圾回收等等重要功能。基于寄存器的虚拟机的一个优点就是所需要的资源相对较少,用硬
件实现虚拟机比较容易一些。Dalvik虚拟机是专门为移动设备设计的,它在开发的时候就考虑到用最少的内存资源来执行,
以及支持同时执行多个虚拟机的特性。Dalvik虚拟机所执行的中间码并非是java虚拟机所执行的java字节码,而是依靠转换
工具dx将java字节码转换成.dex格式由虚拟机执行。Dalvik虚拟机与java虚拟机最大的不同在于java虚拟机基于栈,而D
alvik基于寄存器。
四、系统库
系统库各部分功能如下所示:
SurfaceManager:对显示子系统进行管理,并且为多个应用程序提供了2D和3D图层的无缝融合
媒体库:基于PacketVideoOpenCORE;该库支持多种常用的音频、视频格式回放和录制,同时支持静态图像文件。编码格式
包括MPEG4,H.264,MP3,AAC,AMR,JPG,PNG
SQLite:一个对于所有应用程序可用,功能强劲的轻量级关系型数据库引擎
OpenGLES:Android是依据OpenGLES1.0API标准来实现其3D绘图函数库的,该函数库可以用软件方式执行,也可以
用硬件加速方式执行,其中3D软件光栅处理方面已进行高度优化
FreeType:提供点阵字、向量字的描绘显示
WebKit:*ekbit是一个开源的\Web浏览器引擎。Apple的Safari,Google的Chrome,NokiaS60平台的默认浏览器,Apple手机
和Android手机的默认浏览器,都采用的是Webkit作为浏览器的引擎。另外两个浏览器引擎分别是Gecko和Trident,大名
鼎鼎的Firefox便是使用的Gecko,而微软的IE系列则使用的是Trident。WebKit引擎比其它引擎更受程序员欢迎的原因,
除了其引擎的高效稳定,兼容性好外,其源码结构清晰,易于维护,是一个很重要的原因。近年来,google的加入更是让
VCebkit有所升温,从GooleChrome浏览器,GooleAnroid手机操作系统内置浏览器均采用Webkit作为内核。
SGL:2D绘图方面的绘图引擎
Libc:一个从BSD继承来的标准C系统函数库(libc),它是专门为基于embeddedlinux的设备定制的
SSL:
五、Linux内核
Android的核心系统服务依赖于Linux2.6内核,如安全性,内存管理,进程管理,网络协议栈和驱动模型。Linux内核也
同时作为硬件和软件栈之间的抽象层。Linux内核中包含如下一些驱动:显示驱动、摄像头驱动、flash内存驱动、Binder(IP
C)驱动、键盘驱动、Wifi驱动、Audio驱动、电源管理等等
WebKit简介参照其它总结材料
Dalvik虚拟机简介参照其它总结材料
Webkit浏览器引擎简介
bk,K5.com/jyli/archivc/20IO/0"31/l66O355,htmJ
什么是Webkit
Wekbit是一个开源的Web浏览器引擎。Apple的Safari,Google的Chrome,NokiaS60平台的默认浏览器,Apple手机和Android
手机的默认浏览器,都采用的是Webkit作为浏览器的引擎。另外两个浏览器引擎分别是Gecko和Trident,大名鼎鼎的Firefox
便是使用的Gecko,而微软的IE系列则使用的是Trident。WebKit引擎比其它引擎更受程序员欢迎的原因,除了其引擎的高
效稳定,兼容性好外,其源码结构清晰,易于维护,是一个很重要的原因。近年来,印。水:的加入更是让Webkit有所升温,
从GooleChrome浏览器,GooleAnroid手机操作系统内置浏览器均采用Webkit作为内核。
Wekbit做了什么?
作为浏览器的内核,Webkit做了哪些工作?为了了解这些,先让我们来看下一个Web浏览器究竟做了什么。我们可以从输
入输出的角度来看一个Web浏览器为我们做了哪些工作。先看一个简单的例子,Web浏览器的输入是一个HTML文档,输
出则是一个我们用眼睛所看到的一个Web页面,就普通用户而言它的输入和输出就是这么简单,如下图所示:
InputOutput
G3»:::*1*
dw«c>
cllM“♦ptitevV.-
iMvIO'4U*>
<41V
<3
salfMmamgf
xar2•an*.
8.•MTuaM•-Ufft
M.•«?*<«<)
2,」."tr>i
M.W1MC::••::'->;
<,EI2
</«!«>
WebBrowser
那么W’ebkit的输入和输出又是什么呢?如果能明白这个,那我们就能很清楚的知道Webkit到底是做什么的了。不过现在要
说清楚这个还有点困难,因为Wtbkit的输出就要复杂些了,因为它的输出本来就非直接面向用户,简单点来说,Webkit的
输入是web文档,输出是一些看不见的模型,浏览器上层借助于这些模型来绘制出我们所看到的实际页面。
Webkit组成
Webkit实际上包含三大部分,至少从代码结构上来说是这样的,当然,如果细分的话还能够划分出更多的模块。如下所示
Webkit
WebCoreJavaScriptCore
其中,WebCore是Webkit的核心部分,它实现了对文档的模型化,包括了CSS,DOM,Render等的实现;JavaSriptCore显然
是对JavaSript支持的实现(WebCore和JSCorc来自于KDE项目的KHTML和KJS开源项目)。而橘黄色标注的Webkit部分包
含了很多不同平台对Webkit封装的实现,即抽象出了与浏览器所能直接对应的一些概念的实现,比如WebView,WebPage,
WebFrame等等。这三部分共同构成了Webkit,在源码中,它们分别对应三个目录,即Webkit三大部分为袋ebCoreJavaSript
Core,Webkit。
更多关于Webkit的介绍,搜索相关的资料…
Dalvik虚拟机简介
http:〃/article/show/15
什么是Dalvik虚拟机
Google于2007年底正式发布了AndroidSDK,作为Android系统的重要特性,Dalvik虚拟机也第一次进入了人们的视野。它
对内存的高效使用,和在低速CPU上表现出的高性能,确实令人刮目相看。依赖于底层Posix兼容的操作系统,它可以简单
的完成进程隔离和线程管理。每一个Android应用在底层都会对应一个独立的Dalvik虚拟机实例,其代码在虚拟机的解释下
得以执行。很多人认为Dalvik虚拟机是一个Java虚拟机,因为Android的编程语言恰恰就是Java语言。但是这种说法并不
准确,因为Dalvik虚拟机并不是按照Java虚拟机的规范来实现的,两者并不兼容,同时还有两个明显的不同:
1、Java虚拟机运行的是Java字节码,而Dalvik虚拟机运行的则是其专有的文件格式DEX(DalvikExecutable)»
2、在JavaSE程序中的Java类会被编译成一个或者多个字节码文件(.class)然后打包到JAR文件,而后Java虚拟机会从相
应的CLASS文件和JAR文件中获取相应的字节码;Android应用虽然也是使用Java语言进行编程,但是在编译成CLASS文
件后,还会通过一个工具(dx)将应用所有的CLASS文件转换成一个DEX文件,而后Dalvik虚拟机会从其中读取指令和
数据。
Dalvik和Android系统
Android的系统架构和其操作系统一样,采用了分层的架构。从架构图看,android分为四个层,从上层到低层分别是应用程
序层、应用程序框架层、Android运行时和库、linux内核:
APPLICATIONS
HomeContactsPhoneBrowser
APPLICATIONFRAMEWORK
WindowContentV«w
ActivityManager
ManagerProvidersSystem
TelephonyResourceLocationNocificauon
PackageManager
ManagerManagerManagerManager
LIBRARIESANDROIDRUNTIME
SurfaceManagerMediaSQLiteCoreLibraries
Framework
OpenGL|ESFreelypeWfebKit
Machine
SGL
LINUXKERNEL
DisplayFlashMemoryBinder(IPC)
CameraDriver
DnverDriverDriver
AudioPower
KeypadDriverWiFiDnver
DriversManagement
如图所示,AndroidRunTime包括两部分:核心库和Dalvik虚拟机。核心库包括了最基本的类库,如datastructure,network,
Utilities,Filesystem等的,很多实现代码都是来自ApacheHarmony项目,主要目的是保证虚拟机的类库能够和JavaSE的类库
最大可能的兼容,从而降低应用开发者从JavaSE阵营转移到Android开发阵营的难度,增加其可用性。Dalvik虚拟机主要
是完成对象生命周期的管理,堆栈的管理,线程管理,安全和异常的管理,以及垃圾回收等等重要功能。
Dalvik虚拟机的主要特征
Dalvik虚拟机非常适合在移动终端上使用,相对于在桌面系统和服务器系统运行的虚拟机而言,它不需要很快的CPU速度
和大量的内存空间。根据Goo日e的测算,64M的RAM已经能够令系统正常运转了。其中24M被用于底层系统的初始化和
启动,另外20M被用于高层启动高层服务。当然,随着系统服务的增多和应用功能的扩展,其所消耗的内存也势必越来越
大。归纳起来,Dalvik虚拟机有如下几个主要特征:
一、专有的DEX文件格式
DEX是Dalvik虚拟机专用的文件格式,而为什么弃用已有的字节码文件(CLASS文件)而采用新的格式呢?
1、一个应用中会定义很多类,编译完成后即会有很多相应的CLASS文件,CLASS文件间会有不少冗余的信息;而DEX文
件格式会把所有的CLASS文件内容整合到一个文件中。这样,除了减少整体的文件尺寸,I/O操作,也提高了类的查找速
度。原来每个类文件中的常量池,在DEX文件中由一个常量池来管理,具体方式如下图:
Original.classfiles
classZapperclassBtort
Napper"]|*Sour8Fi后."Btorf]「Zapper"]
Nap"][孙a/lang/Objecf11.|method'zap][xmeNumberTable”]
tapper尸旧」.匡丝”ip^vaiagSsnQLa\a!ag
"(Ljava4ang/S:ring;Liava/lang/■|"Code”|Object:)Ljava/)ang」Stnng;"
「♦■『8向,
classZapUser
「ZapUser1]Napper”]「ZapUseqava”|
|method[;rwNumberTable「|
"(Ljava/lang/StringiLjava/lang/
|.Code口dbjectMjava/lang/SuingJ
|methodre口--MNva/lang/Object*]
।^j.|'SourceFile。]
vanD^oiD
[IseZap”]「LZapper”|
2、增加了新的操作码的支持
3、文件结构尽量简洁,使用等长的指令,借以提高解析速度
4、尽量扩大只读结构的大小,借以提高跨进程的数据共享
如何生成DEX文件呢?Android系统和Dalvik虚拟机提供了工具(DX),在把Java源代码编译成CLASS文件后,使用DX
工具。
二、DEX的优化
DEX文件的结构是紧凑的,如果我们还想要求运行时的性能有进一步提高,我们就仍然需要对DEX文件进行进一步优化。
优化主要是针对以下几个方面:
1、调整所有字段的字节序(LHTLE_ENDIAN)和对齐结构中的每一个域
2、验证DEX文件中的所有类
3、对一些特定的类进行优化,对方法里的操作码进行优化。
优化后的文件大小会有所增加,应该是原DEX文件的1-4倍。优化发生的时机有两个:对于预置应用,可以在系统编译后,
生成优化文件,以ODEX结尾。这样在发布时除APK文件(不包含DEX)以外,还有一个相应的ODEX文件;对于非预
置应用,包含在APK文件里的DEX文件会在运行时被优化,优化后的文件将被保存在缓存中。
三、基于寄存器
相对于基于堆栈的虚拟机实现,基于寄存器的虚拟机实现虽然在硬件通用性上要差一些,但是它在代码的执行效率上却更胜
一筹。一般来讲,虚拟机中指令的解释执行时间主要花在以下三个方面:
1、分发指令
2、访问运算数
3、执行运算
其中“分发指令”这个环节对性能的影响最大。在基于寄存器的虚拟机里,可以更为有效的减少冗余指令的分发和减少内存
的读写访问,如:
Expression:a=b^c〃
Stack:ILOADc,ILOADb,IADD,ISTOREa^
Register:IADDa,b,w
虽然Dalvik虚拟机并没有使用目前流行的虚拟机技术,如JIT,但是根据Google的报告,这个功能的缺失并没有让DaKik
虚拟机在性能上有所损失。我们也相信,Dalvik虚拟机的性能还有进一步提高的空间。
四、一个应用,一个虚拟机,一个进程
每一个Android应用都运行在一个Dalvik虚拟机实例里,而每一个虚拟机实例都是一个独立的进程空间。虚拟机的线程机制,
内存分配和管理,Mutex等等都是依赖底层操作系统而实现的。所有Android应用的线程都对应一个Linux线程,虚拟机因
而可以更多的依赖操作系统的线程调度和管理机制。
不同的应用在不同的进程空间里运行,加之对不同来源的应用都使用不同的Linux用户来运行,可以最大程度的保护应用的
安全和独立运行。
Zygote是一个虚拟机进程,同时也是一个虚拟机实例的孵化器,每当系统要求执行一个Android应用程序,Zygote就会FORK
出一个子进程来执行该应用程序。这样做的好处显而易见:Zygote进程是在系统启动时产生的,它会完成虚拟机的初始化,
库的加载,预置类库的加载和初始化等等操作,而在系统需要一个新的虚拟机实例时,Zygote通过复制自身,最快速的提供
个系统。另外,对于一些只读的系统库,所有虚拟机实例都和Zygpte共享一块内存区域,大大节省了内存开销。
应用程序包(APK)被发布到手机上后,运行前会对其中的DEX文件进行优化,优化后的文件被保存到缓存区域(优
化后的格式被称为DEY),虚拟机会直接执行该文件。如果应用包文件不发生变化,DEY文件不会被重新生成。
Android应用开发和Dalvik虚拟机
Android应用所使用的编程语言是Java语言,和JavaSE一样,编译时使用SunJDK将Java源程序编程成标准的Java字节码
文件(.class文件),而后通过工具软件DX把所有的字节码文件转成DEX文件(classes.dex)。最后使用Android打包工具
(aapt)将DEX文件,资源文件以及AndroidManifest.xml文件(二进制格式)组合成一个应用程序包(APK)。应用程序包
可以被发布到手机上运行。
Activity生命周期
一、Activity栈
Android系统中,所有Acitivity被保存在Activity栈中。当启动一个新的Acrivity时,这个Activity就被压入Activity栈的顶部。
如果用户通过返回键回到上一个Activity的画面,则栈顶的Activity将被弹出,下一个Activity就变成新的栈顶Activity,并显
示在屏幕上。下图显示了Activity栈的运作方式:
二、Activity的4种状态
Activity状态的变化完全由Android的内存管理器决定,变化顺序是不确定的,用户无法预知。Activity从创建到关闭,可能
经历下面的4种状态:
1、活跃状态:当一个Activity位于Activity栈的顶部时,它所代表的用户界面位于屏幕的最前端。也就是说,此时Activity
代表的界面对用户来说是可见的,同时用户还可以在这个界面上进行操作。Android会尽可能维持处于活跃状态的Activity,
采取的措施包括中止位于Activity栈上其他的Activity,以便释放资源。此时如果另一个Activity的状态变为活跃,之前活跃
的Activity将变为暂停。
2、暂停状态:有一种特殊情况,Activity对用户来说是可见的,但是它并不拥有用户输入的焦点,如果Activity处于这种状
态,我们就称之为暂停的Activity。这种情况发生的场景通常是:在应用程序的前端有一个透明的、或者非全屏显示的Acciv
ity,处于暂停状态的Activity的界面位于这个透明的、或者非全屏显示的界面下面。一般情况下,Android也不会结束处于暂
停状态的Activity,但是如果资源极其匮乏,系统也有可能结束暂停的Activity。[在程序中模拟这样的情况]
3、结束状态:Activity所显示的界面在屏幕上不可见,那么它的状态就是结束状态。系统会在内存中保存处于结束状态的A
ctivity的状态信息,以便该Activity重新变为可见的时候,状态能够迅速切换。当系统内存不足需要释放内存资源时,处于
结束状态的Activity是首选对象。
4、销毁状态:当Activity彻底结束或者关闭后,它的状态就变为非活跃状态,这时Activity已经从Activity栈上移除。
Activity生命周期
三、Activity的生命周期
从上图可以看到,有3个比较关维的生命周期循环:
1、activity完整的生命周期自第一次调用onCrcate。开始,直至调用onDcstroy。为止。activity在onCrcate。中初始化Activi
ty,而在onDcstroyO中释放所有系统资源。比如说,如果activity有一个线程在后台运行以从网络上下载数据,它会以onCr
eateO创建那个线程,而以onDestroy。销毁那个线程。
2.activity的可见生命周期自onStart。调用开始直到对应的onStop。调用。当Activity运行到onStarc。时,用户可以在屏幕
上看到此Activity,当Activity运行到onStopO时,这个Activity就从屏幕上消失。在此期间,Activity对用户来说是可见的,
虽然有时候Activity并不拥有对用户的输入焦点。
3.activity的活跃生命周期自onRcsume。调用起,到对应的onPause。调用为止。在此期间,用户不仅能够看到Activity,还
能够通过屏幕获得输入的焦点。和可见生命周期类似,在Activity完整的生命周期中可能经历多个活跃生命周期。尽可能保
持onPouseO和cnResume。的简洁,这样能够使得应用程序切换的时候响应迅速(需要注意的是,在内存不足的时候,onPa
use。、onStopO这两种状态是可以被系统直接kill的)
四、实例说明
当activity从一个状态转变到另一个状态时,Activity类中对应于该状态的方法将被调用:
onCreateQ
onStartQ
onResumcQ
onPauseQ
onStopO
onDestroy。
我们可以重载所有这些方法以便在状态改变时做一些合适的工作。所有的activity都必须实现onCrcate。用以当对象第一次实
例化时进行初始化设置。很多activity会实现onPause。以提交数据变化或准备停止与用户的交互。
具体代码参见附件,这里仅仅列出重要的部分:
AndroidManifestxml
<?xmlvcr$ion="1.0"encocling=Hutf-8,'?>
〈manifestxnilns:andr<iid="http://schemas.andn)id.ee>m/apk/rcs/android"
package=Mcom.siudio.android,,
android:vcrsionCodc=*,1"
android:vcrsionNanK=
<applicationandroid:ic<)n=n(aklrawablc/icon":indrcid:liihd="@string/app_namc”>
'-activity:uidn,id:n:imc=".Acuvityl」kCyck”
an<Jn>iii:labcl="@string/app_nanic,,>
〈intent-filter〉
<actiona»drojd:namc-"nndroid.inccnt.aciion.MAIN"/>
<carcgt>tyandroid:namc="android.intcnt.catcgoty.lJ\UNCHER"/>
</intcnt-filter>
</activity>
〈activityandroid:name=".OtherActivity"/>
〈/application〉
<uscs-sdkandraid:minSdkVcrsk)n="3"/>
</manifcst>
ActivityLifeCycle.java
packagec«im.studi<).andn>id;
importandn>itl.;ipp.Activity";
importandroid.app-AktiDialog;
imponandroid.contcnt.Dialoglntcrfacc;
importandroid.contcnt.lntcnt;
importandroid.content.Diahiglntcrfacc.C)nClickl.istener;
importandroid.os.Bundlc;
importandroid.uul.i^>g;
importandroid.view.View;
importandn>id.\vidgct.Bunon;
publicclassAcrivinijfcCydcextendsActivity{
privatestaticfinalStringTAG="[LifeCyclc]";
privateButtonbmOpcnDialog;
privateButtonbtnOthcrActivjty;
^Override
publicvoidonCrcatc(BundlcsavedInstanccStatc){
supcr.<)n(Jrcatc(sav«ilnstanccSrarc);
setContentVicw(R.layour.main);
initialView。;〃对控件进行各种初始化操作
Log.i(TAG,''onCreatc'*);
}
^.Override
publicvoidonRestartO
(
supcr.onRcstartO;
Log.ifTAG,"onRestart,r);
)
©Override
publicvoidonStartO
(
super.onStartO;
LogJfTAG,"onStart");
}
@Ovcrridc
publicvoidonRcsumcO
(
super.<>nRcsumcQ;
Log.i(TAG,"onResume");
I
@6,crridc
publicvoidonPausef)
(
super.onPauscQ;
Log.i(TAG,MonPause");
}
(^.Override
publicvoidonStopQ
(
super.onStopO;
Logj(TAG,"onStop");
)
@Override
publicvoidonDestroyO
(
supcr.onDcstroyO;
Lx>g.i(TAG,"onDestroy");
)
privatevoidinindViewQ
{
btnOpcnDialog=(Button)this.HndViewById(R.id.bniOpcnDialog);
hrnOrhcrAcrivin=(Buuon)this.findVicwByld(R.id.bcnOthcrActivjt)");
Burton.C)n('licklJstcnerbm()penDiulogijstener=newButron.OnClicklJstenerQl
publicvoidonCIick.(Vicwv){
newAlcrtDialog.Builder(Acnv!(ylifcCyclc.this)
.sctIcon(android.R.drawablc.ic_dialog_inf(>)
.setTitle「欢迎")
,维tMewwigeC欢迎使用本程序,Activity生命周期测试
.seiPosidvcBuuon「确定newOnClicklJsccnerO{
publicvoidonClick(Dialoglntcrfacedialog,mtwhich){
//TODOAuto-gpneratcdmethodstub
|).crcatc().showO;
Button.OnClicklJswicrbmOdicrActivit5-ljstcncr=newButton.OnClickIJstcncrO{
publicvoidonClick(Vicwv){
Inrentintent=newln(cnt(Activin*ljfcCydc.this,OthcrActivity.dass);
startAcrivity(intenO;
btnOpenDia!og.sctOnClickListcncr(btn(JpcnDialoglJstener);
bin()thcrActivin'.sct<.)nClickl.istcncr(btn()thcrActivityl4stcncr);
运行后模拟器的界面如下:
五、根据log信息,详细分析Activity的生命周期
1、启动该程序:
TimepidtagMessage
07-0922:09:25.216I1083[LifeCycle]onCreate
07-0922:09:25.278I1083[LifeCycle]onStart
07-0922:09:25.278I1083[LifeCycle]onResume
Activity的启动顺序是onCreatc->onStart->onResume
2、启动然后退出该程
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025深度探讨合同履行过程中的风险与管理策略
- 安徽省蚌埠二中2015-2016学年高一生物上学期期中试题
- 胰腺癌病人的护理常规
- 药物性皮炎护理查房
- 缺铁性贫血的护理教学
- 西安信息职业大学《热力系统设计与实践》2023-2024学年第二学期期末试卷
- 石嘴山工贸职业技术学院《保险学B》2023-2024学年第二学期期末试卷
- 商洛职业技术学院《高级英语(Ⅱ)》2023-2024学年第二学期期末试卷
- 天津城市建设管理职业技术学院《工程材料与成型技术》2023-2024学年第二学期期末试卷
- 郑州工业安全职业学院《美术基础训练幼儿手工》2023-2024学年第二学期期末试卷
- 妇产科学-盆腔器官脱垂课件
- 村史范本、模板
- 自贸试验区片区重点发展产业列表
- 消防设备设施应急操作培训课件(PPT)
- 眼球的结构与功能
- 《社会主义制度在中国的确立》示范课教学设计【高中思想政治人教版必修1中国特色社会主义】
- 立方米卧式浓硫酸储罐设计
- 三乙胺安全标签
- GB/T 4490-2021织物芯输送带宽度和长度
- GB/T 17793-1999一般用途的加工铜及铜合金板带材外形尺寸及允许偏差
- ICU常见检查项目及课件
评论
0/150
提交评论