`

Android 活动对象(Activity) 复习

 
阅读更多

<!-- [if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:Zoom>0</w:Zoom> <w:TrackMoves/> <w:TrackFormatting/> <w:PunctuationKerning/> <w:ValidateAgainstSchemas/> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:DoNotPromoteQF/> <w:LidThemeOther>EN-US</w:LidThemeOther> <w:LidThemeAsian>ZH-CN</w:LidThemeAsian> <w:LidThemeComplexScript>X-NONE</w:LidThemeComplexScript> <w:Compatibility> <w:BreakWrappedTables/> <w:SnapToGridInCell/> <w:WrapTextWithPunct/> <w:UseAsianBreakRules/> <w:DontGrowAutofit/> <w:SplitPgBreakAndParaMark/> <w:DontVertAlignCellWithSp/> <w:DontBreakConstrainedForcedTables/> <w:DontVertAlignInTxbx/> <w:Word11KerningPairs/> <w:CachedColBalance/> <w:UseFELayout/> </w:Compatibility> <m:mathPr> <m:mathFont m:val="Cambria Math"/> <m:brkBin m:val="before"/> <m:brkBinSub m:val="&#45;-"/> <m:smallFrac m:val="off"/> <m:dispDef/> <m:lMargin m:val="0"/> <m:rMargin m:val="0"/> <m:defJc m:val="centerGroup"/> <m:wrapIndent m:val="1440"/> <m:intLim m:val="subSup"/> <m:naryLim m:val="undOvr"/> </m:mathPr></w:WordDocument> </xml><![endif]--><!-- [if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" DefUnhideWhenUsed="true" DefSemiHidden="true" DefQFormat="false" DefPriority="99" LatentStyleCount="267"> <w:LsdException Locked="false" Priority="0" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Normal"/> <w:LsdException Locked="false" Priority="9" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="heading 1"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 2"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 3"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 4"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 5"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 6"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 7"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 8"/> <w:LsdException Locked="false" Priority="9" QFormat="true" Name="heading 9"/> <w:LsdException Locked="false" Priority="39" Name="toc 1"/> <w:LsdException Locked="false" Priority="39" Name="toc 2"/> <w:LsdException Locked="false" Priority="39" Name="toc 3"/> <w:LsdException Locked="false" Priority="39" Name="toc 4"/> <w:LsdException Locked="false" Priority="39" Name="toc 5"/> <w:LsdException Locked="false" Priority="39" Name="toc 6"/> <w:LsdException Locked="false" Priority="39" Name="toc 7"/> <w:LsdException Locked="false" Priority="39" Name="toc 8"/> <w:LsdException Locked="false" Priority="39" Name="toc 9"/> <w:LsdException Locked="false" Priority="35" QFormat="true" Name="caption"/> <w:LsdException Locked="false" Priority="10" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Title"/> <w:LsdException Locked="false" Priority="1" Name="Default Paragraph Font"/> <w:LsdException Locked="false" Priority="11" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Subtitle"/> <w:LsdException Locked="false" Priority="22" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Strong"/> <w:LsdException Locked="false" Priority="20" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Emphasis"/> <w:LsdException Locked="false" Priority="59" SemiHidden="false" UnhideWhenUsed="false" Name="Table Grid"/> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Placeholder Text"/> <w:LsdException Locked="false" Priority="1" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="No Spacing"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 1"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 1"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 1"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 1"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 1"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 1"/> <w:LsdException Locked="false" UnhideWhenUsed="false" Name="Revision"/> <w:LsdException Locked="false" Priority="34" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="List Paragraph"/> <w:LsdException Locked="false" Priority="29" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Quote"/> <w:LsdException Locked="false" Priority="30" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Intense Quote"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 1"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 1"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 1"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 1"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 1"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 1"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 1"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 1"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 2"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 2"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 2"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 2"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 2"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 2"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 2"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 2"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 2"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 2"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 2"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 2"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 2"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 2"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 3"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 3"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 3"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 3"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 3"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 3"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 3"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 3"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 3"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 3"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 3"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 3"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 3"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 3"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 4"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 4"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 4"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 4"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 4"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 4"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 4"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 4"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 4"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 4"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 4"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 4"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 4"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 4"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 5"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 5"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 5"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 5"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 5"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 5"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 5"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 5"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 5"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 5"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 5"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 5"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 5"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 5"/> <w:LsdException Locked="false" Priority="60" SemiHidden="false" UnhideWhenUsed="false" Name="Light Shading Accent 6"/> <w:LsdException Locked="false" Priority="61" SemiHidden="false" UnhideWhenUsed="false" Name="Light List Accent 6"/> <w:LsdException Locked="false" Priority="62" SemiHidden="false" UnhideWhenUsed="false" Name="Light Grid Accent 6"/> <w:LsdException Locked="false" Priority="63" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 1 Accent 6"/> <w:LsdException Locked="false" Priority="64" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Shading 2 Accent 6"/> <w:LsdException Locked="false" Priority="65" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 1 Accent 6"/> <w:LsdException Locked="false" Priority="66" SemiHidden="false" UnhideWhenUsed="false" Name="Medium List 2 Accent 6"/> <w:LsdException Locked="false" Priority="67" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 1 Accent 6"/> <w:LsdException Locked="false" Priority="68" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 2 Accent 6"/> <w:LsdException Locked="false" Priority="69" SemiHidden="false" UnhideWhenUsed="false" Name="Medium Grid 3 Accent 6"/> <w:LsdException Locked="false" Priority="70" SemiHidden="false" UnhideWhenUsed="false" Name="Dark List Accent 6"/> <w:LsdException Locked="false" Priority="71" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Shading Accent 6"/> <w:LsdException Locked="false" Priority="72" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful List Accent 6"/> <w:LsdException Locked="false" Priority="73" SemiHidden="false" UnhideWhenUsed="false" Name="Colorful Grid Accent 6"/> <w:LsdException Locked="false" Priority="19" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Subtle Emphasis"/> <w:LsdException Locked="false" Priority="21" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Intense Emphasis"/> <w:LsdException Locked="false" Priority="31" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Subtle Reference"/> <w:LsdException Locked="false" Priority="32" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Intense Reference"/> <w:LsdException Locked="false" Priority="33" SemiHidden="false" UnhideWhenUsed="false" QFormat="true" Name="Book Title"/> <w:LsdException Locked="false" Priority="37" Name="Bibliography"/> <w:LsdException Locked="false" Priority="39" QFormat="true" Name="TOC Heading"/> </w:LatentStyles> </xml><![endif]--><!-- [if gte mso 10]> <style> /* Style Definitions */ table.MsoNormalTable {mso-style-name:普通表格; mso-tstyle-rowband-size:0; mso-tstyle-colband-size:0; mso-style-noshow:yes; mso-style-priority:99; mso-style-qformat:yes; mso-style-parent:""; mso-padding-alt:0cm 5.4pt 0cm 5.4pt; mso-para-margin-top:0cm; mso-para-margin-right:0cm; mso-para-margin-bottom:10.0pt; mso-para-margin-left:0cm; line-height:115%; mso-pagination:widow-orphan; font-size:11.0pt; font-family:"Calibri","sans-serif"; mso-ascii-font-family:Calibri; mso-ascii-theme-font:minor-latin; mso-hansi-font-family:Calibri; mso-hansi-theme-font:minor-latin;} </style> <![endif]-->

活动对象 (Activities)

一个活动对象是一个应用组织,他提供了一个与用户交互的屏幕,用户可以利用这些交互做一些事情,比如:打电话,拍照,发邮件 ,或者是看地图等。每个活动对象都占用一个窗口去画他的用户接口。窗口通常填满屏幕,但是有可能小于屏幕而是漂浮在其它窗口之上的。

一个应用通常包括多个活动对象,而这些活动对象 彼此是松散关联的。典型的,一个活动对象指定为 Main对象,当用户第一次启动这个对象的时候,他将会首先展现给用户。为了实现不同的动作,每个对象都可以启动其它对象。每次,当一个新活动对象启动了,前一个活动对象就被停止,但是系统会将其保存到一个栈中 (名叫 back stack).当一个新活动对象启动了,他被 push back stack 栈中并且占据用户的焦点。 Back stack 遵守一个后入先出的原则。所以当用户完成了当前活动,按 BACK键,当前的活动对象被弹出栈并被消毁,并且使前一个对象活动得以继续

当一个活动对象因为另一个活动对象的启动而停止了。这些状态的改变是通过活动对象生命周期的回调方法通知的。由于活动对象的状态改变,活动对象可能会接到一些回调方法。比如:系统正在创建,正在停止,正在进入 Resume状态 , 或者正在销毁。每个回调方法都给你一次机会去做相应的工作以应对状态的改变。例如,当停止了,你的活动对象应该释放较大的对象,比如网络和数据库连接。当活动 resume时,可以重新获得这些资源并继续被中断的活动。这些状态转换就是活动对象的所有生命周期。

本文余下的部分讨论如何建立和使用活动对象的基础,包括完整的讨论活动对象的生命周期如何工作,你可以合适的管理这些状态之间的转换。

创建活动对象 (Create an Activity)

要创建一个活动对象,你必须要创建一个 Activity(或者一个 Activity的子类 )的子类 .在你的子类中,你需要实现活动对象生命周期转换的回调方法 ,例如:当活动对象正被创建,停止, resumed,或者销毁。最为重要的两个回调方法是 :

onCreate()你必须实现这个方法。当系统创建你的对象的时候回调用。在你的实现里,你应该实现必要的组件。最为重要的是,这里你需要调用 setContentView()去定义你的活动对象的用户接口的布局 .

onPause()系统调用这个方法,是用户正在离开你的活动对象的第一个指示(当然你的活动对象并不一定是要被销毁)。这里通常是你保存用户会话的需要持久保存的地方(因为用户有可能不会再回来)。

这里还有一些其它的生命周期的回调方法。你应该使用这些回调给用户提供流畅的用户体验和对一些中断比如停止和销毁做出处理。所有的生命周期的回调将会稍后作出讨论。

实现一个用户接口 (Implementing a user interface)

活动对象的用户接口是由一组层次体系的视图提供的。这些视图是都是从 View类衍生出的对象。每个视图都控制一个活动对象的屏幕的特定的矩形架,并且可以对用户交互作出响应。例如,一个视图可能是一个按钮,当用户触摸到它便发起一个动作。

Android提供了一组现成的视图以供你设计和组织你的布局。 ”Widgets”是一组视图,它们为屏幕提供了一组可视的 (可交互的 ) 元素 , 例如: button, text filed, checkbox, 或者仅仅是一张图片。 ”Layouts”是一组从 ViewGroup衍生而来的视图 , 它们为他们的子视图创建了一组布局模型,例如: liner layout, grid layout, relative layout 你也可以继承 View或者 ViewGrooup 类去创造你自己的 widgets layout,并用他们来应用为你自己的活动对象的布局。

定义一个布局的较为普遍的方法是使用 XML layout 文件,这个文件保存在你的应用的资源中。这种方法,你的用户接口的设计可以从定义用户行为的源代码中独立出来维护。你可以用 setContentView()为你的活动对象设置布局 UI,为布局传递资源 ID.然而,你也可以在你的活动对象的代码中创建新的 Views并且通过插入一些 View ViewGroup建立一些层次系统 ,然后传递 ViewGroup的根给 setContentView()以供其使用。

manifest中声明活动对象 (Declaring the activity in the manifest)

为了让你的活动对象能被系统访问,你需要在 manifest中声明你的活动对象。要声明一个活动对象,打开 manifest文件,并且加入 <activity>元素作为 <application>元素的子元素。例如:


这里还有其它的一些属性你可以设置。例如标签,图标,或者 UI的主题。

使用intent filter(Using intent filters)

一个 <Activity>元素也可以配置各种 intent-filter。使用 <intent-filter>元素来实现。可以声明其它的应用组织如何来激活他。

只有一个 Activity应该有 ”main” Action ”launcher” Category。如果你只想要你的应用自己包含这个 Activity,并且不允许别个应用激活这个应用,你不需要 intent filter

然而,如果你想要你的 Activity响应用来自别的应用的 intent,你必须要为你的 Activity定义附加的 intent filter。为每一个你想要响应的 intent的类型,你必须定义一个 <intent-filter>,他包含一个 <action>元素,可选的,一个 <category>元素和或一个 <data>元素。这些元素指定了你的 activity可以响应的 intent的类型。

启动一个Activity(Starting an Activity)

你可以通过调用 startActivity()方法来启动另一个 Activity。需要传递一个 intent去描述什么样的 Activity你想启动。 Intent可精确指你想要启动哪一个 Activity,也可以指定你想执行的 Activity的类型 (系统会为你选择适当的 Activity去执行,即使这个 Activity来自不同的应用 )。一个 Intent也可以传递一些小量数据到启动的 Activity中去。

当在你自己的应用中,你通常可以简单的启动一个已知的 Activity。你可以用类名 (你要启动的 Activity)创建 一个 intent精确的定义你要启动的 Activity。例如,一个 Activity如何启动另一个名叫 SignInActivity Activity



然而你的应用可能用你的数据执行一些动作,比如:发邮件,发 Message,或者状态更新。在这种情况下,你可能需要使用别的应用提供的 Activity。这就是 Intent的真正的价值所在,你可创建一个 intent去描述什么样的 Activity你想执行,系统会从其它应用中启动合适的 Activity。如果这里有多个 Activity可以处理这个 intent,用户可以选择一个来使用。例如:如果你想要你的用户发送邮件,你可以创建如下的 intent:



EXTRA_EMAIL添加了一组邮件地址,他将会出现在发邮件 Activity to栏中。这时, email应用的 Activity就启动了,当用户完成他的工作之后,又可以激活你之前的 Activity

为一个结果而启动一个 Activity( Starting an activity for a result )

有时,你可能想从你启动的 Activity中得到返回的结果。那么你需要用 startActvityForResult()来启动 Activity。当启动的这个程序结果之后,反回结果会返回到 onActvityResult()中。

关闭一个 Activity(Shutting Down an Activity)

你可以通过调来 finish()方法来关闭你的 Activity。你也可以用 finishActivity()来关闭一个你之间启动的 Activity

管理活动对象的生命周期 (Managing the Activity Lifecycle)

实现回调方法管理活动对象的生命周期是开发一个强大的稳定的应用的关键。一个活动对象的生命周期直接被他关联到的其它活动对象,他的任务,以及所属的 back stack所影响。

一个对象可以以以下三个状态存在:

Resumed:

一个活动对象在屏幕的前台,并且拥有用户的焦点。这个状态有时也指 running.

Paused:

另一个活动对象在屏幕前台,并且拥有用户的焦点,当时当前活动对象仍然可见。也就是说,另一个活动对象在这个活动对象上面,并且这个活动对象有一部分是透明的,没有完全占据整个屏幕。 Paused 对象是完全 alive ( Activity 仍然保留在内存中,他维护他所有状态和成员信息,并且仍然附属于 window manager) ,但是在低内存情况下为了系统为获得内存他可能被杀死。

Stopped:

活动对象被另一个活动对象完整的占领了,即是这个活动对象处于后台。一个 Stopped对象仍然是 alive (这个活动对象保留在内存中的 ,他维护所有的状态和成员信息 ,但是他不再附属于 window manager),然而,他对于用户不在可见,他可能在任何需要内存的时候被系统杀死。

如果一个 Activity stopped或者 paused的,系统可以通过 finish()或者杀死进程来释放 (drop)掉它。当 Activity被重新打开 ( finished或都 killed之后 ),它必须完全被重新创建。

实现生命周期的回调 ( Implementing the lifecycle callbacks )

当一个 Activity从以上描述到的一个状态到另一个状态转换,他会通过各种回调方法得以通知。所有的回调方法都是勾连的,你可以重载他们去做合适的工作以适应你的 Acitvity的状态改变。以下的 Activity骨架包括每一个基本的生命周期的方法。


总而言之,这些方法定义了 Activity的整个生命周期。通过实现这些方法,你可以监视生命周期的三个嵌套循环 :

整个生命期 (entire lifetime),在调用 onCreate() onDestroy()之间的整个生命期。你的 Activity应该在 onCreate()中执行一些全局的状态的 (如定义 layout)设置,并在 onDestory()中释放持有的资源。例如:你有一个线程一直在后台持续下载东西,那么你需要在 onCreate()中创建并在 onDestory()中停止他。

可视生命期 (visible lifetime),可视生命期是在 onStart() onStop()之间的生命期。在这段时期内用户可以在屏幕上看到我们的 Activity并且与其交互。例如:当新的 Activity启动并且当前的 Activity不在可见时调用 onStop()。在这两个方法之间,你可以维护你需要显示给用户的 Activity的资源。例如,你可以在 onStart()中注册一个广播接收器去监视那些影响到你的 UI的改变,在 onStop()中反注册这个广播接收器,这时用户已经看不到你显示的东西了。系统可能在 Activity在整个生命期中调 onStart() onStop()很多次,作为 Activity对用户的显示与隐藏的轮替。

前景期 (foreground lifetime),Activity的前景期发生在 onResume() onPasue()之间。在这期间, Activity在屏幕的最前端,并且拥有用户的输入焦点。一个 Activity可以频繁的转换在进出前景之间。例如:当设备进入休眠状态或者一个对话框跳出来以至于 onPause()被调用。由于这个状态可能会很频繁的转换,这两个方法中的代码应该尽可能轻量级避免使转换变慢以至于用户等待。

1说明了这些循环和 Activity各状态之间可能的路径。矩形代表你可以实现回调方法 ,你可以执行一些操作,执行操作时的活动状态之间的转换

处理配置改变 ( Handling configuration changes )

一些设备的配置可以在运行中发生改变 (比如:屏幕方向,键盘的可访问性,语言 )。当这样的改变发生了, Android重新启动正在运行的 Activity(onDestroy()调用,然后立即调用 onCreate())。重启行为的设计是为了帮你的应用去自动重载你所提供的可选资源以适应新的配置。如果你在你的应用中的这个事件设计了适当的处理,他可以较强的适应在生命周期中意想不到的事件发生。

处理配置改变 (比如屏幕方向的改变 )的最好的办法是,使用 onSaveInstanceState() onRestoreInstanceState()简单的保存你的应用程序的状态。

( 协调多个 Activity) Coordinating activities

当一个 Activity启动另一个 Activity,两个 Activity的生命周期都将经历。第一个 Activity暂停 (Pause)或停止 (Stop)(当然,如果第一个 Activity在后台仍然可见,他将不会停止 ),而另一个 Activity已创建了。在这两个 Activity共享磁盘数据或者其它什么地方的数据的情况下,理解第二个 Activity被创建时第一个没有完全停止是很重要的。相反,第二个 Activity的启动过程与第一个 Activity的停止过程是交替重叠的。

生命周期的回调顺序被定义好了的,特别的当两个 Activity在同一个进程中并且一个启动另一个。下面是当 Activity A启动 Activity B时这些操作发生的顺序。

1. Activity A onPause()方法被执行。

2. Activity B onCreate(),onStart(),onResume()方法依次执行( Activity B 拥有用户焦点)。

3. 然后,如果 Activity A不再在屏幕上可见,他的 onStop()方法执行。

你可以根据这些可预知的回调发生的顺序去管理一个 Activity到另一个之间的转换。例如:如果你的一个 Activity需要写入数据库,另一个 Activity才能读他。所以你应该在 onPause()中写入数据库而不是 onStop()中。

分享到:
评论

相关推荐

    Android期末复习题01

    ### Android期末复习题知识点梳理 #### 一、Intent的Component属性 **知识点1:Component属性的作用** - **作用**:`Component`属性用于指定`Intent`的目标组件的类名称。 - **工作原理**:通常情况下,Android系统...

    Android期末复习题02

    在Android期末复习题02中,我们关注到几个关键知识点,包括内存回收、Intent的作用、自定义style的声明、Menu的使用、SQLiteOpenHelper的操作、Service生命周期以及BroadcastReceiver的注册。 1. **内存回收**:在...

    安卓android期末考试复习要点.docx

    ### 安卓Android期末考试复习要点 #### 一、复习重点概述 在准备安卓Android期末考试的过程中,以下几点是必须掌握的关键知识点: 1. **字符、数组资源的定义**: - 字符资源通常用于存储单个字符或短字符串,如...

    Android应用开发期末复习

    9. **在Activity中获取文本框**:可以通过`findViewById()`方法获取到文本框对象,进而进行进一步的操作。例如: ```java TextView textView = (TextView) findViewById(R.id.text_view_id); textView.setText(...

    Android期末复习选择题100道

    Android是谷歌主导的移动操作系统,其核心特性之一就是四大组件,包括Activity、Service、BroadcastReceiver和ContentProvider。这些组件构成了Android应用程序的基础架构。 1. **Activity**:Activity是用户界面的...

    Android面试复习资料

    - 活动(Activity):理解活动生命周期,以及如何在不同状态间切换。 - 布局管理器(Layout Manager):熟悉LinearLayout、RelativeLayout、ConstraintLayout等布局的使用。 - 数据持久化:SQLite数据库的增删...

    Android考试复习题

    ### Android考试复习题知识点详解 #### 一、解答题知识点详解 **1. Android应用程序的四大组件** - **Activity**:表示用户可见的界面。一个应用程序通常由多个Activity组成,每个Activity代表一个屏幕上的交互...

    android架构-复习基本OOP知识d

    在Android框架中,许多UI组件如Activity、Fragment都支持继承,这样可以复用父类的功能,同时子类可以进行特定的定制。 3. **多态**:多态是指同一种行为在不同的对象上表现出不同的效果。Android中的接口和抽象类...

    androidgui程序设计复习题.docx

    1. **内存回收**:在Java(包括Android)中,内存回收是由垃圾收集器(Garbage Collector,简称GC)自动进行的,它负责释放不再使用的对象所占用的内存。因此,选项B是正确的。程序员不需要手动释放内存,选项A错误...

    Android架构:复习基本OOP知识b

    在Android中,我们通常通过定义类和接口来实现封装,例如Activity和Fragment就是封装了与用户交互逻辑的组件。 继承则允许子类继承父类的属性和行为,从而减少了代码重复,提高了代码复用性。在Android开发中,我们...

    android架构-复习基本OOP知识a

    6. 类与对象的关系:在Android开发中,类通常是系统组件的模型,如Activity、Service、BroadcastReceiver等。通过实例化这些类,我们可以创建并操控实际的系统组件。 7. 接口:接口在Android中扮演着重要角色,它们...

    2022年Android期末考试复习试卷仅供参考.docx

    【Android期末考试复习知识点】 1. **Android操作系统**:Android是一种开源的移动设备操作系统,用于智能手机、平板电脑等设备。常见的手机操作系统有Android、Windows Mobile、Apple iPhone iOS,但Windows Vista...

    Android学习必备之JAVA复习版块收录第一期

    在Android中,Activity、Fragment等类都基于继承关系构建。 5. **多态**:多态性允许父类引用指向子类对象,提高了代码的灵活性。在Android中,Adapter、OnClickListener等接口的使用体现了多态性。 6. **异常处理...

    Android复习

    "不同Activity之间的通信.doc"可能会探讨Intent对象的角色,它是Android中传递信息的主要方式。你可以学习如何通过Intent启动新的Activity,传递数据,以及使用BroadcastReceiver进行全局广播。此外,文件可能还会...

    Android面试复习资料大全(包含java源码)

    根据文件提供的信息,本篇Android面试复习资料大全内容覆盖了Android开发的基础知识、核心机制、设计模式、性能优化、架构模式、面试常考问题等方面,同时包含了Java基础、集合框架、反射、注解、IO、异常处理、泛型...

    android 背单词app源码.zip

    2. **Activity和Fragment**:Activity是Android应用的基本组件,负责用户界面的管理。Fragment则可以看作是Activity的一部分,可以在不同屏幕尺寸和配置上复用,提供更灵活的界面设计。 3. **XML布局文件**:应用的...

Global site tag (gtag.js) - Google Analytics