Android 中Activity生命周期分析:Android中横竖屏切换时的生命周期过程
最近在面试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中横竖屏切换时的生命周期过程的更多相关文章
- Android(java)学习笔记224:横竖屏切换时Activity的生命周期
1.横竖屏切换的生命周期 默认情况下横竖屏切换,先销毁再创建 2.有的时候,默认情况下的横竖屏切换(先销毁再创建),对应用户体验是不好的,比如是手机游戏横竖屏切换对游戏体验非常不好,下面两种方 ...
- Android(java)学习笔记167:横竖屏切换时Activity的生命周期
1.横竖屏切换的生命周期 默认情况下横竖屏切换,先销毁再创建 2.有的时候,默认情况下的横竖屏切换(先销毁再创建),对应用户体验是不好的,比如是手机游戏横竖屏切换对游戏体验非常不好,下面两种方 ...
- Android 如何去掉手机中横竖屏切换时的转屏动画?
前言 欢迎大家我分享和推荐好用的代码段~~ 声明 欢迎转载,但请保留文章原始出处: CSDN:http://www.csdn.net ...
- 横竖屏切换时Activity的生命周期
设置横竖屏切换时Activity生命周期的属性设置,在清单文件中的Activity节点中设置.根据具体需求设置: 1.不设置Activity的android:configChanges时,切屏会重新调 ...
- 横竖屏切换时,Activity的生命周期
横竖屏切换时,Activity的生命周期 1.新建一个Activity,并把各个生命周期打印出来 2.运行Activity,得到如下信息 onCreate-->onStart-->onRe ...
- Activity嵌套多个Fragment实现横竖屏切换
一.上图 二.需求 最近项目遇到个横竖屏切换的问题.较为复杂.在此记之. 1.Activity中竖屏嵌套3个Fragment,本文简称竖屏FP1,FP2,FP3. 2.当中竖屏FP1与FP2能够切换为 ...
- 测试横竖屏切换时activity 的生命周期
对于这个面试题,相信大家都见过,网上给出的答案是: 1.不设置Activity的android:configChanges时,切屏会重新调用各个生命周期,切横屏时会执行一次,切竖屏时会执行两次 2.设 ...
- 安卓横竖屏切换时activity的生命周期
关于Activity横竖屏切换的声明周期变化: 1.新建一个Activity并把各个生命周期打印出来 2.运行Activity,得到如下信息 onCreate-->onStart-->on ...
- Andriod开发---《横竖屏切换时 Activity的生命周期的总结》
横屏切换竖屏Activity的生命周期详解,下面分析一下切换时具体的生命周期: 1.新建一个Activity,并把各个生命周期打印出来 2.运行Activity,得到如下信息 onCreate--&g ...
随机推荐
- RUP(Rational Unified Process)
RUP Rational Unified Process 目前阶段在学习UML,怎么会写RUP呢?学习UML是为了更好的把系统搭建好,RUP也是一样,为系统服务! 软件危机 美国国家总审计局,在198 ...
- sharepoint 认证
MCPD http://www.microsoft.com/learning/en/us/mcpd-certification.aspx#fbid=YktyKIYXeFg Exam 70-573: T ...
- Mac下运行ASP.NET Core应用程序
Mac下运行ASP.NET Core应用程序 在Mac下运行ASP.NET Core应用程序 通过参照.NET Core相关官方文档,在我的Mac电脑上用Visual Studio Code创建了我的 ...
- 【转】如何设置Android软键盘的默认不弹出?
在开发Anroid的时候,当你打开一个界面的时候,屏幕的焦点会自动停留在第一个EditText中,Android的软键盘默认会自动弹出,用户第一眼连界面都没有看清楚,软键盘就弹出来了,这就影响到了用户 ...
- BZOJ 1854: [Scoi2010]游戏 无向图判环
题目链接: 题目 1854: [Scoi2010]游戏 Time Limit: 5 Sec Memory Limit: 162 MB 问题描述 lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装 ...
- 【转载】Spring中的applicationContext.xml与SpringMVC的xxx-servlet.xml的区别
一直搞不明白两者的区别. 如果使用了SpringMVC,事实上,bean的配置完全可以在xxx-servlet.xml中进行配置.为什么需要applicationContext.xml?一定必须? 一 ...
- SQL SERVER其它函数
本篇文章还是学习<程序员的SQL金典>内容的记录,此次将讲解的是SQL SERVER常用的其它函数.(其它数据库这里就不罗列了,想看更多的可以关注<程序员的SQL金典>). 具 ...
- Linux 终端访问 FTP 及 上传下载 文件
今天同事问我一个问题,在Linux 下访问FTP,并将文件上传上去. 我之前一直是用WinSCP工具的. 先将文件从linux copy到windows下,然后在传到ftp上.google 一下. 方 ...
- 设置go语言语法高亮
1. 将$GOROOT/misc/vim/go.vim文件拷贝到-/.vim/syntax/目录下 2. 添加下面代码到~/.vimrc文件中 let mysyntaxfile = "XXX ...
- POJ2104 K-th Number Range Tree
又是区间第k大,这次选择这道题是为以后写线段树套平衡树铺路的.Range Tree可以理解成线段树套vector吧,相当于每个结点多存了对应区间的一个排好序的序列.画一下就会知道空间的消耗是nlogn ...