最近在面试Android,今天出了一个这样的题目,即如题:

我当时以为生命周期是这样的:

onCreate --》 onStart -- ---》 onResume ---》 onPause ---》 onStop ---》 onRestart ---》 onResume ---》 onPause ---》 onStop

回家后我自己在电脑上重新演示了一下,得出了另外的结果,果然是实践出真知啊。 好了,先上代码,给有需要的朋友直接贴代码:

package com.king.review.base;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log; /**
* author: king.liu
* data:2013-10-8 下午8:02:40
* do:TODO
*/ public class ActivityLife extends Activity { public static final String TAG = "ActivityLife"; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState); Log.i(TAG, "onCreate ...");
} @Override
protected void onStart() {
super.onStart();
Log.i(TAG, "onStart ...");
} @Override
protected void onRestart() {
super.onRestart();
Log.i(TAG, "onRestart ...");
} @Override
protected void onResume() {
super.onResume();
Log.i(TAG, "onResume ...");
} @Override
protected void onPause() {
super.onPause();
Log.i(TAG, "onPause ...");
} @Override
protected void onStop() {
super.onStop();
Log.i(TAG, "onStop ...");
} @Override
protected void onDestroy() {
super.onDestroy();
Log.i(TAG, "onDestory ...");
} }

既然谈到了Activity问题,那我就完整的来弄一下。

首先程序启动的时候,打印出的log:

10-08 20:32:52.231: I/ActivityLife(1188): onCreate ...
10-08 20:32:52.251: I/ActivityLife(1188): onStart ...
10-08 20:32:52.251: I/ActivityLife(1188): onResume ...

即流程是onCreate --->onStart--->onResume.

点返回按钮的时候,打印的log:

10-08 20:33:49.282: I/ActivityLife(1188): onPause ...
10-08 20:33:50.401: I/ActivityLife(1188): onStop ...
10-08 20:33:50.401: I/ActivityLife(1188): onDestory ...

流程是:onPause--->onStop--->onDestory

综上一个正常的流程就是 :onCreate --->onStart--->onResume--》onPause--->onStop--->onDestory

再来说说横竖屏切换时的生命周期:

首先启动时:

10-08 20:46:43.811: I/ActivityLife(1188): onCreate ...
10-08 20:46:43.831: I/ActivityLife(1188): onStart ...
10-08 20:46:43.831: I/ActivityLife(1188): onResume ...

生命周期是这样的:onCreate--->onStart--->onResume.

然后切换一下:

10-08 20:47:56.551: I/ActivityLife(1188): onPause ...
10-08 20:47:56.561: I/ActivityLife(1188): onStop ...
10-08 20:47:56.561: I/ActivityLife(1188): onDestory ...
10-08 20:47:56.631: I/ActivityLife(1188): onCreate ...
10-08 20:47:56.631: I/ActivityLife(1188): onStart ...
10-08 20:47:56.651: I/ActivityLife(1188): onResume ...

生命周期是这样的:onPause-->onStop--->onDestory--->onCreate--->onStart--->onResume;

然后再切换一下屏幕:

10-08 20:49:24.601: I/ActivityLife(1188): onPause ...
10-08 20:49:24.601: I/ActivityLife(1188): onStop ...
10-08 20:49:24.601: I/ActivityLife(1188): onDestory ...
10-08 20:49:24.621: I/ActivityLife(1188): onCreate ...
10-08 20:49:24.631: I/ActivityLife(1188): onStart ...
10-08 20:49:24.631: I/ActivityLife(1188): onResume ...

生命周期是这样:onPause--->onStop---》onDestory---》onCreate--->onStart--->onResume;

综上:Android中横竖屏切换时的生命周期是这样的:

onCreate--->onStart--->onResume.--》onPause--->onStop---》onDestory--->onCreate--->onCreate--->onStart--->onResume;

onCreate --》 onStart -- ---》 onResume ---》 onPause ---》 onStop ---》 onRestart ---》 onResume ---》 onPause ---》 onStop

在这里特别要注意一下,当屏幕切换的时候,之前那个屏幕状态就已经销毁了(onDestory),然后在新的屏幕中重新开始一个生命周期:(onCreate-->onStart--->onResume)

我犯的错误是,以为之前屏幕生命周期被挂载起来了,然后再重新启动(onRestart)。。。 这种问题比较常见,正好和小伙伴能共享一下。

Android 中Activity生命周期分析:Android中横竖屏切换时的生命周期过程的更多相关文章

  1. Android(java)学习笔记224:横竖屏切换时Activity的生命周期

    1.横竖屏切换的生命周期     默认情况下横竖屏切换,先销毁再创建 2.有的时候,默认情况下的横竖屏切换(先销毁再创建),对应用户体验是不好的,比如是手机游戏横竖屏切换对游戏体验非常不好,下面两种方 ...

  2. Android(java)学习笔记167:横竖屏切换时Activity的生命周期

    1.横竖屏切换的生命周期     默认情况下横竖屏切换,先销毁再创建 2.有的时候,默认情况下的横竖屏切换(先销毁再创建),对应用户体验是不好的,比如是手机游戏横竖屏切换对游戏体验非常不好,下面两种方 ...

  3. Android 如何去掉手机中横竖屏切换时的转屏动画?

    前言          欢迎大家我分享和推荐好用的代码段~~ 声明          欢迎转载,但请保留文章原始出处:          CSDN:http://www.csdn.net        ...

  4. 横竖屏切换时Activity的生命周期

    设置横竖屏切换时Activity生命周期的属性设置,在清单文件中的Activity节点中设置.根据具体需求设置: 1.不设置Activity的android:configChanges时,切屏会重新调 ...

  5. 横竖屏切换时,Activity的生命周期

    横竖屏切换时,Activity的生命周期 1.新建一个Activity,并把各个生命周期打印出来 2.运行Activity,得到如下信息 onCreate-->onStart-->onRe ...

  6. Activity嵌套多个Fragment实现横竖屏切换

    一.上图 二.需求 最近项目遇到个横竖屏切换的问题.较为复杂.在此记之. 1.Activity中竖屏嵌套3个Fragment,本文简称竖屏FP1,FP2,FP3. 2.当中竖屏FP1与FP2能够切换为 ...

  7. 测试横竖屏切换时activity 的生命周期

    对于这个面试题,相信大家都见过,网上给出的答案是: 1.不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次 2.设 ...

  8. 安卓横竖屏切换时activity的生命周期

    关于Activity横竖屏切换的声明周期变化: 1.新建一个Activity并把各个生命周期打印出来 2.运行Activity,得到如下信息 onCreate-->onStart-->on ...

  9. Andriod开发---《横竖屏切换时 Activity的生命周期的总结》

    横屏切换竖屏Activity的生命周期详解,下面分析一下切换时具体的生命周期: 1.新建一个Activity,并把各个生命周期打印出来 2.运行Activity,得到如下信息 onCreate--&g ...

随机推荐

  1. 深入PHP EOF(heredoc)用法详解

    介绍下使用EOF heredoc方式,输出长段内容的方法, <?php $name = '姓名'; print <<<EOT <html> <head> ...

  2. Windows Form 分页。

    其实功能实现很简单.我做的是一个通用的分页控件.项目时间很紧,可能有点粗糙.欢迎大家斧正.不说了直接贴代码吧. using System; using System.Collections.Gener ...

  3. 信息传递--NOIP2015 day1 T2--暴力

    这道题我用了判联通量加暴力,但联通量判炸了....然后从code[VS]上看到个不错的代码,就拿来了^_^... 基本思路是去掉环外的点,然后走每一个联通块. #include <iostrea ...

  4. cookie、session的联系和区别,多台web服务器如何共享session?

    cookie在客户端保存状态,session在服务器端保存状态.但是由于在服务器端保存状态的时候,在客户端也需要一个标识,所以session也可能要借助cookie来实现保存标识位的作用.cookie ...

  5. crawler spec

    使用说明 0.写在前面 1.本程序完成的抓取网页并保存其文件的工作. 2.目前的版本还需将工程文件导入eclipse中运行. 3.加载主类MyCrawler生成可执行文件. 4.程序主界面: 1 准备 ...

  6. bnuoj 4209 Triangle(计算几何)

    http://www.bnuoj.com/bnuoj/problem_show.php?pid=4209 题意:如题 题解:公式直接计算,或者角平分线求交点 [code1]: #include < ...

  7. 一个有趣的 SQL 查询(查询7天连续登陆)

    一个有趣的 SQL 查询 一个朋友有这样一个SQL查询需求: 有一个登录表(tmp_test),包含用户ID(uid)和登录时间(login_time).表结构如下: . row ********** ...

  8. 【转载】Spring中的applicationContext.xml与SpringMVC的xxx-servlet.xml的区别

    一直搞不明白两者的区别. 如果使用了SpringMVC,事实上,bean的配置完全可以在xxx-servlet.xml中进行配置.为什么需要applicationContext.xml?一定必须? 一 ...

  9. 【BZOJ】【1385】【Baltic2000】Division expression

    欧几里得算法 普通的求个gcd即可……思路题 因为要求尽量是整数……所以 $\frac{x_1}{x_2*x_3*x_4*....*x_n}$是最大的结果了,因为$x_2$必须为分母,$x_1$必须为 ...

  10. Matlab 高斯分布 均匀分布 以及其他分布 的随机数

    Matlab 高斯分布 均匀分布 以及其他分布 的随机数 betarnd 贝塔分布的随机数生成器 binornd 二项分布的随机数生成器 chi2rnd 卡方分布的随机数生成器 exprnd 指数分布 ...