`
litzhiai
  • 浏览: 1426 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

Activity学习

 
阅读更多

由于在Android中,进程的生命周期大多数时候是由系统管理的;另外也由于手机应用的一些特殊性,所以我们需要更多的去关注各个Android Component的运行时生命周期模型。(所谓手机应用的特殊性主要是指这样2点: 1. 手机应用的大多数情况下我们只能在手机上看到一个程序的一个界面 ,用户除了通过程序界面上的功能按钮来在不同的窗体间切换,还可以通过Back键和Home键来返回上一个窗口,而用户使用Back或者Home的时机是非常不确定的,任何时候用户都可以使用Home或Back来强行切换当前的界面。 2. 往往手机上一些特殊的事件发生也会强制的改变当前用户所处的操作状态,例如无论任何情况,在手机来电时,系统都会优先显示电话接听界面。)了解这些Component的生命周期模型一方面是让我们对软件在手机中的运行情况做到心中有数,更重要的,对于程序开发来说,生命周期中的每一个关键事件都会有我们可以覆写于各种Component对应基类型的事件处理方法,了解各Component的生命周期就是让我们在开发程序时明白我们该怎样去编写各种事件的处理代码。例如Activity的Create,就会有对应的事件处理函数onCreate,我们可以从Activity基类覆写这个事件处理函数完成我们需要的相关事件处理:

public class actMain extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
…… //我们的事件处理代码
}
……

这篇Post我们就来看看最常用的Activity的运行时生命周期模型(Service的运行时生命周期模型在下一篇讲述了如何启动一个Service并和其通信后再做描述)。 Activity的生命周期模型在Google提供的官方文档上有比较详细的一个。其一共包含7个我们需要关心的关键事件,下面对其分别详细说明(文字中的粗体字表示后文中会经常用到的概念在第一次出现时会给出解释,之后后文不再详细说明):


1. void onCreate(Bundle savedInstanceState)
当Activity被第首次加载时执行。我们新启动一个程序的时候其主窗体的onCreate事件就会被执行。如果Activity被销毁后(onDestroy后),再重新加载进Task时,其onCreate事件也会被重新执行。注意这里的参数savedInstanceState(Bundle类型是一个键值对集合,大家可以看成是.Net中的Dictionary)是一个很有用的设计,由于前面已经说到的手机应用的特殊性,一个Activity很可能被强制交换到后台(交换到后台就是指该窗体不再对用户可见,但实际上又还是存在于某个Task中的,比如一个新的Activity压入了当前的Task从而“遮盖”住了当前的Activity,或者用户按了Home键回到桌面,又或者其他重要事件发生导致新的Activity出现在当前Activity之上,比如来电界面),而如果此后用户在一段时间内没有重新查看该窗体(Android通过长按Home键可以选择最近运行的6个程序,或者用户直接再次点击程序的运行图标,如果窗体所在的Task和进程没有被系统销毁,则不用重新加载Process, Task和Task中的Activity, 直接重新显示Task顶部的Activity, 这就称之为重新查看某个程序的窗体),该窗体连同其所在的Task和Process则可能已经被系统自动销毁了,此时如果再次查看该窗体,则要重新执行onCreate事件初始化窗体。而这个时候我们可能希望用户继续上次打开该窗体时的操作状态进行操作,而不是一切从头开始。例如用户在编辑短信时突然来电,接完电话后用户又去做了一些其他的事情,比如保存来电号码到联系人,而没有立即回到短信编辑界面,导致了短信编辑界面被销毁,当用户重新进入短信程序时他可能希望继续上次的编辑。这种情况我们就可以覆写Activity的void onSaveInstanceState(Bundle outState)事件,通过向outState中写入一些我们需要在窗体销毁前保存的状态或信息,这样在窗体重新执行onCreate的时候,则会通过savedInstanceState将之前保存的信息传递进来,此时我们就可以有选择的利用这些信息来初始化窗体,而不是一切从头开始。

2. void onStart()
onCreate事件之后执行。或者当前窗体被交换到后台后,在用户重新查看窗体前已经过去了一段时间,窗体已经执行了onStop事件,但是窗体和其所在进程并没有被销毁,用户再次重新查看窗体时会执行onRestart事件,之后会跳过onCreate事件,直接执行窗体的onStart事件。

3. void onResume()
onStart事件之后执行。或者当前窗体被交换到后台后,在用户重新查看窗体时,窗体还没有被销毁,也没有执行过onStop事件(窗体还继续存在于Task中),则会跳过窗体的onCreate和onStart事件,直接执行onResume事件。

4. void onPause()
窗体被交换到后台时执行。

5. void onStop()
onPause事件之后执行。如果一段时间内用户还没有重新查看该窗体,则该窗体的onStop事件将会被执行;或者用户直接按了Back键,将该窗体从当前Task中移除,也会执行该窗体的onStop事件。

6. void onRestart()
onStop事件执行后,如果窗体和其所在的进程没有被系统销毁,此时用户又重新查看该窗体,则会执行窗体的onRestart事件,onRestart事件后会跳过窗体的onCreate事件直接执行onStart事件。

7. void onDestroy()
Activity被销毁的时候执行。在窗体的onStop事件之后,如果没有再次查看该窗体,Activity则会被销毁。


最后用一个实际的例子来说明Activity的各个生命周期。假设有一个程序由2个Activity A和B组成,A是这个程序的启动界面。当用户启动程序时,Process和默认的Task分别被创建,接着A被压入到当前的Task中,依次执行了onCreate, onStart, onResume事件被呈现给了用户;此时用户选择A中的某个功能开启界面B,界面B被压入当前Task遮盖住了A,A的onPause事件执行,B的onCreate, onStart, onResume事件执行,呈现了界面B给用户;用户在界面B操作完成后,使用Back键回到界面A,界面B不再可见,界面B的onPause, onStop, onDestroy执行,A的onResume事件被执行,呈现界面A给用户。此时突然来电,界面A的onPause事件被执行,电话接听界面被呈现给用户,用户接听完电话后,又按了Home键回到桌面,打开另一个程序“联系人”,添加了联系人信息又做了一些其他的操作,此时界面A不再可见,其onStop事件被执行,但并没有被销毁。此后用户重新从菜单中点击了我们的程序,由于A和其所在的进程和Task并没有被销毁,A的onRestart和onStart事件被执行,接着A的onResume事件被执行,A又被呈现给了用户。用户这次使用完后,按Back键返回到桌面,A的onPause, onStop被执行,随后A的onDestroy被执行,由于当前Task中已经没有任何Activity,A所在的Process的重要程度被降到很低,很快A所在的Process被系统结束。

转自:http://hkbarton.sacredfir.com/?p=66

分享到:
评论

相关推荐

    Android Activity学习笔记

    Android Activity学习笔记 Android Activity是Android系统中最基本的组件之一,它负责处理用户交互和显示用户界面。本文将深入讲解Activity的生命周期、Activity之间的数据交互、Activity启动模式、Task和BackStack...

    Activity学习资料汇总

    以下是对Activity学习资料汇总的详细说明: 1. **Activity入门介绍**: Activity是Activiti框架中的核心概念,它代表流程中的一个步骤或活动。通过入门介绍,你可以理解Activity如何在流程图中表示,以及它如何被...

    安卓基本知识只Activity学习源代码

    Activity学习是安卓开发初学者必须掌握的基础知识。理解并熟练运用Activity,可以帮助开发者构建出功能丰富的交互式应用程序。在这个"安卓基本知识之Activity学习源代码"中,我们将深入探讨Activity的工作原理、生命...

    安卓activity学习

    "安卓activity学习"这个主题深入探讨了如何理解和使用Activity,尤其是它的生命周期。Android Activity生命周期是开发者必须掌握的关键概念,因为它直接影响到应用的行为和性能。 Activity的生命周期主要由几个关键...

    Android的activity学习笔记

    【Android的Activity学习笔记】 Activity在Android开发中扮演着至关重要的角色,它是应用程序的基本功能单元,主要用于构建用户界面和处理用户交互。Activity本身并不具备界面元素,而是通过`setContentView(View)`...

    android-activity_学习资料

    "android-activity_学习资料"的压缩包很可能包含了关于Activity的深入学习材料,旨在帮助开发者理解并熟练掌握这一关键概念。Activity是Android系统中用于显示用户界面的类,它可以展示一个屏幕,接收用户输入,并对...

    Activity学习bundle传值窗口透明演示范例

    在Android开发中,Activity是应用程序的基本构建块,用于展示用户界面和处理用户...这个DK压缩包文件可能包含了实现这些功能的示例代码,通过学习和分析这些代码,你将更深入地理解如何在Android应用中实践这些技术。

    androidactivity 学习

    本文将深入探讨Android Activity的学习,包括其概念、生命周期、任务管理以及Intent的使用。 首先,Android应用通常由一个或多个Activity组成,每个Activity对应手机屏幕上显示的一个独立界面。Application则是一个...

    Android学习文档3-Activity

    ### Android Activity 学习知识点详解 #### 一、Android Activity 的 XML 布局与控件使用 在Android开发中,`Activity`是四大组件之一,主要负责UI展示及交互逻辑处理。本篇文章将深入探讨关于`Activity`的XML布局...

    学习Java流程框架Activiti7资料、教程及源码

    内容概要:1,Activity7全套源代码;2,Activity7教程操作及配置文档、笔记、图例;3,Activity工具及环境文件资料;4,项目配置文件及数据库脚本;5,流程设计器插件;...是一套非常好的Activity学习资料。

    activity7学习教程

    1、包含activity7的大纲脑图 2、示例代码,activity整合spring,整合springboot 3、导学笔记和视频 4、pdf讲义和markdown讲义 四、Activiti是目前使用最常用的工作流引擎,在企业中的应用非常广泛。 内容主要分为3...

    深入学习Android activity

    深入学习Android Activity,对于理解Android应用的工作机制至关重要。以下是对Activity的详细解析,以及根据提供的压缩包文件名可能包含的学习路径。 首先,我们从Activity的基础开始。Activity是一个具有可视用户...

    Android父Activity获取子Activity返回信息demo

    在提供的压缩包文件"Intent操作2"中,可能包含了实现这个功能的相关代码示例,可以参考学习,以加深对这一过程的理解。通过这种方式,不同Activity间的交互变得简单且灵活,极大地丰富了Android应用的功能和用户体验...

    安卓学习心得体会(多篇).doc

    1. Activity学习心得 在Android中,Activity是负责管理UI和接受事件的控制器。一个Activity可以对应多个不同的View,以实现简单的逻辑。通过增加新的资源描述layout/second.xml,可以在一个Activity中使用多个View...

    [Android开发从零开始].9.Activity高级学习

    Activity的高级学习涵盖了多个关键概念和技术,对于成为一名熟练的Android开发者至关重要。以下是对Activity高级学习的详细解析: 1. **Activity生命周期**:Activity的生命周期是其核心特性,包括onCreate(), ...

    Android学习笔记-Activity篇

    这篇学习笔记将深入探讨Activity的相关知识,包括创建、声明、启动、关闭以及生命周期管理,同时还会涉及Task和Back Stack的管理。 一、Activity创建: 在Android应用中,Activity的创建通常始于一个Java类,这个类...

    LauncherActivity 开发启动Activity的界面

    通过查看和分析这些文件,我们可以学习如何设置`LauncherActivity`的布局、事件监听器,以及如何与应用的其他部分交互。同时,也可以了解如何根据需求定制`LauncherActivity`的特定功能,如动态加载列表项或集成第三...

    Android学习之Activity弹窗

    当我们谈论“Android学习之Activity弹窗”时,我们通常是指在Activity上显示的各种对话框或者浮层,例如AlertDialog、ProgressDialog、PopupWindow等。这些弹窗在应用中起到了提示信息、获取用户输入、展示选项等...

Global site tag (gtag.js) - Google Analytics