不同情况下的回调
  • 我们打开应用时先后调用了onCreate()->onStart()->onResume
  • 当我们按BACK键时,我们这个应用程序将结束,这时候我们将先后调用onPause()->onStop()->onDestory()
  • 当我们打开应用程序后按HOME的时候,Activity先后调用了onPause()->onStop()这两个方法,这时候应用程序并没有销毁。
  • 而当我们再次启动应用程序时,则先后分别执行了onRestart()->onStart()->onResume()三个方法
  • 在Activity1中启动一个全屏显示的Activity2,注意Activity1中的顺序,onPause()->onCreate()->onStart()->onResume->onStop()
  • 点击BACK健,从Activity2返回Activity1时,注意Activity2中的顺序,onPause()->onRestart()->onStart()->onResume->onStop()->onDestory()
  • 在Activity1中启动一个对话框或透明样式的Activity2,并不会调用Activity1的onStop方法
  • 在Activity1中弹出一个对话框并不会触发生命周期中的任何方法
  • 如果我们将finish()调用直接放在onCreate方法里,onCreate()->onDestory()
  • 如果我们将finish()调用直接放在onStart方法里,onCreate()->onStart()->onStop()->onDestory()
常用设置
  • 对话框样式 android:theme="@android:style/Theme.Dialog"
  • 透明样式 android:theme="@android:style/Theme.Translucent"
  • 忽略屏幕朝向,软键盘,屏幕大小等对activity生命周期的影响  android:configChanges="orientation|keyboardHidden|screenSize"
  • 屏幕只能横向排列,不能切换  android:screenOrientation="landscape"

回调方法应该干些什么

1、onCreate
最重要是在里面调用setContentView,还可以在里面初始化各控件、设置监听、并初始化一些全局的变量。
因为在Activity的一次生命周期中,onCreate方法只会执行一次(和onDestory一样啦,一个是生,一个是灭)。在Paused和Stopped状态下恢复或重启的下,这些控件、监听和全局变量也不会丢失。
 
还可以在onCreate执行数据操作,比如从Cursor中检索数据等等,但是如果你需要每次进入这个Activity时都能更新数据,那么最好放在onStart里面(这个需要根据实际情况来确定)。
 
2、onDestory
在onDestory中确定某些资源是否已经被释放,做一些【最终】的清理工作,比如若在onCreate中开启的某个线程,那么就要在onDestory中判断它是否结束了,如果没有,就结束它。

白注:onDestory不一定会被执行,如被一些清理工具强制清理之后可能并没有调用onDestory方法。

3、onStop
Activity进入到Stopped状态之后,它极有可能被系统所回收,在某些极端情况下,系统可能会直接杀死应用程序的进程,而不是调用onDestory方法回收Activity所占用的内存,也就是说onDestory方法可能不会被调用。所以我们需要在onStop方法中尽可能的释放那些用户【暂时】不需要使用的资源,防止内存泄露。
尽管onPause在onStop之前执行,但是onPause只适合做一些【轻量级】的操作,更多的耗时耗资源的操作还是要放在onStop里面,比如说对数据保存。
 
4、onStart和onRestart
若是在onStop方法里面释放了一些资源,那么我们【重启】这些资源的操作应该放在onStart方法里面(因为onCreate之后也需要开启这些资源)。若是仅Stopped之后才引发的需要单独操作的代码,就可以放在onRestart里面(即onCreate之后并不需要开启)。
 
5、onResume和onPause
onPause和onResume中做的操作,其实意义上和onStart和onStop差不多,只不过是要更【轻量级】的,因为onPause不能阻塞转变到下一个Activity。
比如:停止动画、取消broadcast receivers。当然相应的,需要在onResume中重启或初始化等等。

Activity 【生命周期】的更多相关文章

  1. [转]: 两分钟彻底让你明白Android Activity生命周期(图文)!

    转自:http://blog.csdn.net/android_tutor/article/details/5772285 大家好,今天给大家详解一下Android中Activity的生命周期,我在前 ...

  2. Activity生命周期(深入理解)

    今天看到一篇大神总结Activity的文章,内容甚为详细,特此转载http://www.cnblogs.com/lwbqqyumidi/p/3769113.html Android官方文档和其他不少资 ...

  3. Android Activity生命周期

    从android api文档摘抄出来的activity生命周期图如下: Activity有如下四种状态 a.活动状态  activity处于屏幕前台,获取到了焦点可以和用户进行交互,同一时刻只有一个a ...

  4. Android Activity生命周期详讲

    管理 Activity 生命周期 通过实现回调方法管理 Activity 的生命周期对开发强大而又灵活的应用至关重要. Activity 的生命周期会直接受到 Activity 与其他 Activit ...

  5. android Activity生命周期(设备旋转、数据恢复等)与启动模式

    1.Activity生命周期     接下来将介绍 Android Activity(四大组件之一) 的生命周期, 包含运行.暂停和停止三种状态,onCreate.onStart.onResume.o ...

  6. android开发------Activity生命周期

    这几天工作比较忙,基本没有什么时间更新播客了. 趁着今晚有点时间,我们来简单说一下什么是Activity生命周期和它们各阶段的特征 什么是生命周期 在还没有接触android开发的时候,听到有人说Ac ...

  7. 安卓activity生命周期

    相信不少朋友也已经看过这个流程图了,也基本了解了Activity生命周期的几个过程,我们就来说一说这几个过程. 1.启动Activity:系统会先调用onCreate方法,然后调用onStart方法, ...

  8. Activity生命周期 onCreate onResume onStop onPause (转)

    Android应用开发提高系列(6)——Activity生命周期 onCreate 和 onResume 在程序启动时候都会启动, 所有有些需要在onCreate onResume中都要实现的功能,之 ...

  9. Android总结篇系列:Activity生命周期

    Android官方文档和其他不少资料都对Activity生命周期进行了详细介绍,在结合资料和项目开发过程中遇到的问题,本文将对Activity生命周期进行一次总结. Activity是由Activit ...

  10. Android体系结构及activity生命周期

    Android的系统架构采用了分层架构的思想,如图1所示.从上层到底层共包括四层,分别是应用程序程序层.应用框架层.系统库和Android运行时和Linux内核 Android的系统架构图    每层 ...

随机推荐

  1. python与编码方式

    1.编码方式: ASCII编码:用来表示英文,它使用1个字节表示,其中第一位规定为0,其他7位存储数据,一共可以表示128个字符. 拓展ASCII编码:用于表示更多的欧洲文字,用8个位存储数据,一共可 ...

  2. javascript定义类的方法总结

    1.构造函数法 类是对象的模板,定义了对象共有的方法属性数据 等,在javascript中一个函数就是一个对象,也可以看做一个类的构造方法. 所以我们可以像以下方式定义类: //1.经典的构造方法 Q ...

  3. Node.js教程

    Node.js是什么? Node.js是建立在谷歌Chrome的JavaScript引擎(V8引擎)的服务器端平台.Node.js是由瑞恩·达尔在2009年开发的,它的最新版本是v0.10.36. N ...

  4. Ombrophobic Bovines

    poj2391:http://poj.org/problem?id=2391 题意:一个人有n个农场,每个农场都一个避雨的地方,每个农场有一些牛,每个避雨的地方能容纳牛的数量是有限的.农场之间有一些道 ...

  5. 【HDOJ】3085 Nightmare Ⅱ

    双向BFS.注意,任何一个点出队后,首先需要考虑ghost. /* 3085 */ #include <iostream> #include <queue> #include ...

  6. 【ZOJ】3430 Detect the Virus

    动态建树MLE.模仿别人的代码模板各种原因wa后,终于AC. #include <iostream> #include <cstdio> #include <cstrin ...

  7. Gvim自动编译运行c++11的程序

    gcc中对c++11的支持是默认不开启的,要想在实现对其的成功编译,需要添加参数-std=c++11: g++ -o test.exe test.cpp g++ -o test.exe test.cp ...

  8. bzoj1221

    网络流与线性规划24题中的餐巾计划吧明显要拆点吧,把每一天拆成2个点,i,i+n起点   终点    容量    费用 s      i      inf      c    每天都可以购买新毛巾 i ...

  9. UDP 收/发 广播包

    网络通信基础 如果网络中两个主机上的应用程序要相互通信,其一要知道彼此的IP,其二要知道程序可监听的端口.因为同一主机上的程序使用网络是通过端口号来区分的. UDP Socket的使用过程: 1. 初 ...

  10. (转载)php数组添加、删除元素的方法

    (转载)http://www.phpgs.com/html/php/phpjichu/20120130440.html 带来一篇php 数组 添加元素.删除元素的方法的文章,有需要的php学习者参考下 ...