码迷,mamicode.com
首页 > 其他好文 > 详细

Activity生命周期

时间:2015-05-27 22:35:58      阅读:279      评论:0      收藏:0      [点我收藏+]

标签:

每个Activity实例都有其生命周期。在其生命周期内,activity在运行、暂停和停止三种可能的状态间进行转换。每次状态发生转换时,都有一个Activity方法将状态改变的消息通知给activity。下图显示了activity的生命周期、状态以及状态切换时系统调用的方法。

技术分享

 

我们已经熟悉了onCreate(Bundle)方法。在创建activity实例后,但在此实例出现在屏幕上以前,Android操作系统会调用该方法。
通常,activity通过覆盖onCreate(...)方法来准备以下用户界面的相关工作:

  • 实例化组件并将组件放置在屏幕上(调用方法setContentView(int));
  • 引用已实例化的组件;
  • 为组件设置监听器以处理用户交互;
  • 访问外部模型数据。

无需自己调用onCreate(...)方法或任何其他Activity生命周期方法,理解这一点很重要。我们只需在activity子类里覆盖这些方法即可,Android会适时去调用它们。

一、日志跟踪理解Activity生命周期

1、输出日志信息

Android内部的android.util.log类能够发送日志信息到系统级别的共享日志中心。Log类有好几个日志信息记录方法。

 

public static int d(String tag, String msg)

d代表着“debug”的意思,用来表示日志信息的级别。

第一个参数表示日志信息的来源,通常以类名为值的TAG常量传入。这样,很容易看出日志信息的来源。

第二个参数表示日志的具体内容。

2、使用LogCat查看日志

运行GeoQuiz应用。急速翻滚的各类信息立即出现在LogCat窗口中。(如无法看到任何日志信息,很可能是因为LogCat正在监控其他设备。选择Window → Show
View → Other...菜单项,打开Devices视图,选中要监控的设备后再切换回LogCat。)
为方便日志信息的查找,可使用TAG常量过滤日志输出。单击LogCat左边窗口上方的绿色+按钮,创建一个消息过滤器。Filter Name输入QuizActivity,by Log Tag同样输入QuizActivity。


在设备上单击后退键,再查看LogCat。可以看到,日志显示QuizActivity的onPause()、 onStop()和onDestroy()方法被调用了。单击设备的后退键,相当于通知Android系统“我已完成acitivity的使用,现在不需要它了。”接到指令后,系统立即销毁了acitivity。这实际是Android系统节约使用设备有限资源的一种方式。

 

重新运行GeoQuiz应用。这次,选择单击主屏幕键,然后查看LogCat。日志显示系统调用了QuizActivity的onPause()和onStop()方法,但并没有调用onDestroy()方法。单击主屏幕键,相当于通知Android“我去别处看看,稍后可能回来。”此时,为快速响应随时返回应用,Android只是暂停当前activity而并不销毁它。停止的activity能够存在多久,谁也无法保证。如果系统需要回收内存,它将
首先销毁那些停止的activity。

 

3、设备旋转与生命周期

  • 设备旋转时,当前看到的QuizActivity实例会被系统销毁,然后创建一个新的QuizActivity实例。
  • 旋转设备会改变设备配置(device configuration)。

设备配置是用来描述设备当前状态的一系列特征。这些特征包括:屏幕的方向、屏幕的密度、屏幕的尺寸、键盘类型、底座模式以及语言等等。在运行时配置变更(runtime configuration change)发生时,可能会有更合适的资源来匹配新的设备配置。

下面新建一个备选资源,只要设备旋转至水平方位,Android就会自动发现并使用它。

  • 创建水平模式布局,res目录创建一个新文件夹并命名为layout-land。将activity_quiz.xml文件从res/layout/目录复制至res/layout-land/目录。现在我们有了一个水平模式布局以及一个默认布局(竖直模式)。

注意,两个布局文件必须具有相同的文件名,这样它们才能以同一个资源ID被引用。这里的-land后缀名是配置修饰符的另一个使用例子。res子目录的配置修饰符表明了Android是如何通过它来定位最佳资源以匹配当前设备配置的。可查阅Android的配置修饰符列表以及配置修饰符代表的设备配置信息。

  • 水平模式布局修改(layout-land/activity_quiz.xml)

 

Android可自动完成调用最佳匹配资源的工作,但前提是它必须通过新建一个activity来实现。QuizActivity要显示一个新布局,方法setContentView(R.layout.activity_quiz)必须再次被调用。而调用setContentView(R.layout.activity_quiz)方法又必须先调用QuizActivity.onCreate(...)方法。因此,设备一经旋转,Android需要销毁当前的QuizActivity,然后再新建一个QuizActivity来完成QuizActivity.onCreate(...)方法的调用,从而实现使用最佳资
源匹配新的设备配置。

4、设备旋转前保存数据

 

Activity生命周期

标签:

原文地址:http://www.cnblogs.com/mingcaoyouxin/p/4534447.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!