简介:

这个基本是必问的问题了,说一下你对Activity生命周期的理解,呵呵…

onCreate, onStart, onResume, onPause, onStop, onDestroy, onRestart这些大家都知道 如何回答的不落俗套,比格高呢…

先上一张完整的生命周期图吧: Activity/Fragment生命周期总结

分析:

那么为什么要弄这么多函数出来呢,主要是因为在Android中,应用间切换的需求比较频繁,这么做主要是为了适应这种场景。比如两个Activity来回切换会有如下工作要做:

  1. 所有个静态初始化工作,此时view还不存在,需要创建view,绑定数据;提供之前封存的状态;(onCreate)
  2. 显示给用户(onStart)
  3. 开始与用户交互,显示动画,打开独占资源;(onResume)
  4. 保存所有的为保存数据,停止动画以及所有的耗CPU资源操作;提交在用户离开时期待保存的内容(例如邮件草稿);释放独占资源(以防下一个App使用);(onPause)
  5. 一些不适合放在onPause中做的工作(heavy-load)(onStop)
  6. 释放App关联资源,比如onCreate创建的线程,停止Trace收集,保证App终止时没有泄漏资源(onDestroy)

如果把这些所有启动动作都放在一个函数,比如onStart中明显是不合理的: 如果这两个Activity分别称为AAty和BAty,从A切换到B再切换到A,onCreate中的动作明显不需要再做了,所以必须要独立出来放到onCreate中,以便碰到这种情况的时候不执行onCreate;另外如果在onStart中显示动画显然也是不合理的,因为Activity在当时还不可见,所以把onResume独立出来。停止的过程则反之。

原则:

  1. onCreate里面尽量少做事情,避免程序启动太久都看不到界面
  2. onStart()方法是一个来验证某些必须的系统特性是否可用的比较好的地方。
  3. onPause()并不是Activity是否可见的最好指示器,有可能有keyboard在前台,应使用 onWindowFocusChanged(boolean) 做判断。
  4. 如果对应的onPause()在500ms内还没有执行完,ActivityManagerService就会强制关闭这个Activity.所以不应该使用onPause()来保存用户改变的数据 (例如填入表格中的个人信息) 到永久存储(File或者DB)上,而放到onStop中来加快切换速度。
  5. 几乎所有Activity的子类,都会实现onCreate和onPause这两个方法
  6. 不应该使用onDestroy保存数据,比如对content provider的保存应该在onPause或者onSavedInstanceState中进行,因为极端情况下,系统会直接杀死我们的app进程,并不执行activity的onDestroy()回调方法, 因此我们需要使用onStop()来释放资源,从而避免内存泄漏。

问题:

1. 切换过程为什么一定是A:onPause()->B:onCreate()->A:onStop()呢

如果不执行A:onPause()来释放独占资源,B根本无法使用。 先执行B:onCreate()最后再执行A:onStop()是为了尽快让B进入可交互状态,提升用户体验,onStop中一些耗时操作可以在可交互以后慢慢执行。

参考:

  1. Activity/Fragment最强生命周期总结
  2. Android Activity为什么要细化出onCreate、onStart、onResume、onPause、onStop、onDesdroy这么多方法让应用去重载?

Android中Activity的生命周期的更多相关文章

  1. 浅谈Android中Activity的生命周期

    引言 我想对于Android开发人员来说,Activity是再熟悉不过了,今天我们就来探讨下Activity的生命周期.熟悉的掌握Activity对于开发健壮的Android应用程序来说至关重要.下面 ...

  2. 【android】android中activity的生命周期

    activity生命周期: 实例代码: public class DemoActivity extends Activity { //1.activity第一次被创建的时候,执行 @Override ...

  3. Android应用程序中Activity的生命周期

    Android应用程序中Activity的生命周期 对于Android来说Activity的生命周期是非常的重要,尤其是对于新学者来说,只有充分了解了Activity的生命周期,才能写出优良用户体验的 ...

  4. 每天一点Android干货-Activity的生命周期

    Activity Activity是这样一个程序组件,它为用户提供一个用于任务交互的画面. 一个应用程序通常由多个activity组成,它们彼此保持弱的绑定状态.典型的,当一个activity在一个应 ...

  5. Android之Activity的生命周期

    PS:写一发关于Activity的生命周期,也算是面试的重点内容. 学习内容: 1.Activity的生命周期 2.面对多种情况的时候Activity的生命周期 3.onSaveInstanceSta ...

  6. 无废话Android之activity的生命周期、activity的启动模式、activity横竖屏切换的生命周期、开启新的activity获取他的返回值、利用广播实现ip拨号、短信接收广播、短信监听器(6)

    1.activity的生命周期 这七个方法定义了Activity的完整生命周期.实现这些方法可以帮助我们监视其中的三个嵌套生命周期循环: (1)Activity的完整生命周期 自第一次调用onCrea ...

  7. android学习——activity的生命周期

    Android中主要组件之Activity的生命周期,基本都是翻译Android API和个人的理解. 首先看一下Android api中所提供的Activity生命周期图: Activity其实是继 ...

  8. Android中服务的生命周期与两种方式的区别

    服务的生命周期跟Activity的生命周期类似.但是生命周期甚至比你关注服务如何创建和销毁更重要,因为服务能够在用户不知情的情况下在后台运行. 服务的生命周期---从创建到销毁---可以被分为以下两个 ...

  9. Android的activity的生命周期

    activity的生命周期有四个重要的状态:活动,暂停,停止,销毁 基本的方法有:onCreate.onStart.onResume.onPause.onStop.onDestory 最经常使用的方法 ...

随机推荐

  1. UVALive 3902 网络

    https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  2. [poj2492]A Bug's Life(并查集+补集)

    A Bug's Life Time Limit: 10000MS   Memory Limit: 65536K Total Submissions: 34678   Accepted: 11339 D ...

  3. hdu 5596 GTW likes gt

    题目链接: hdu 5596 题意不难懂(虽然我还是看了好久)大概就是说 n 个人排成一列,分成两组, 第 i 秒时第 i 个人会消灭掉前面比他 b[i] 值低的且和他不同组的人,c[i] 表示第 c ...

  4. svn使用

    1 svn地址: svn://www.svn999.com/annie123.test12345 2 svn 账户: 账户使用时期:项目checkout时期 会提示键入用户名密码 3 新增文件 (1) ...

  5. JAVA开发错误总结(仅记录遇到的错误---后续不断更新......)

    =======华丽分割线(工具总结)===================== 1:Maven项目中junit测试找不到主类的问题 Class not found com.test.utils.tes ...

  6. SPSS数据分析—加权最小二乘法

    标准的线性回归模型的假设之一是因变量方差齐性,即因变量或残差的方差不随自身预测值或其他自变量的值变化而变化.但是有时候,这种情况会被违反,称为异方差性,比如因变量为储蓄额,自变量为家庭收入,显然高收入 ...

  7. IOS开发常见错误整理

    1.Cannot create an NSPersistentStoreCoordinator with a nil model 这是在执行到这段代码时引发的: - (void)viewDidLoad ...

  8. C++笔记(1)explicit构造函数

    按照默认规定,只有一个参数的构造函数也定义了一个隐式转换,将该构造函数对应数据类型的数据转换为该类对象,如下面所示: class String { String ( const char* p );  ...

  9. 关于磁盘错误disk error

    到同事办公室的时候,机器的启动界面就停在磁盘错误disk error上. 首先怀疑的就是硬盘可能坏了,于是就用u盘启动,运行mhdd检测,一直到10%都没有发现错误.于是退出,重启,发现机器能够启动x ...

  10. Android studio下gradle Robolectric单元测试配置

    android studio下gradle Robolectric单元测试配置 1.Robolectric Robolectric是一个基于junit之上的单元测试框架.它并不依赖于Android提供 ...