简介:

这个基本是必问的问题了,说一下你对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. 换个新的思路 代替解压jar包 例证:wechat4j 框架中的templateMsg类

    很多朋友在写java的程序的时候都喜欢用第三方的jar包和框架,有可能遇到jar包中的内容已经跟不上官方开发者文档的更新,导致部分内容出错了,这个时候可能就要放弃这个jar的使用,但是这个jar中的其 ...

  2. XPath使用实例

    实例 1基本的XPath语法类似于在一个文件系统中定位文件,如果路径以斜线 / 开始, 那么该路径就表示到一个元素的绝对路径 //BBB           选择所有BBB元素 /AAA/CCC 选择 ...

  3. 设置hr标签的粗细

    hr {border:0px;border-bottom:1px solid #5c5c3d;}

  4. Meta标签用法大全

    meta是html文档在head标签里定义的一个对文档进行描述的功能性标签 meta标签有下面的作用: 1.搜索引擎优化(SEO) 2.定义页面使用语言 3.自动刷新并指向新的页面 4.实现网页转换时 ...

  5. setTimeout和setInterval的区别以及如何写出效率高的倒计时

    1.setTimeout和setInterval都属于js中的定时器,可以规定延迟时间再执行某个操作,不同的是setTimeout在规定时间后执行完某个操作就停止了,而setInterval则可以一直 ...

  6. HTML5 十大新特性(四)——Canvas绘图

    H5引入了canvas标签,默认是一个300*150的inline-block.canvas的宽高只能用它自身的width和height属性来指定,而不能使用css样式中的width.height. ...

  7. javascript event(事件对象)详解

    javascript event(事件对象)详解   1. 事件对象     1. 事件对象 Event 对象代表事件的状态,比如事件在其中发生的元素.键盘按键的状态.鼠标的位置.鼠标按钮的状态. 什 ...

  8. 【oracle】oracle学习笔记2--scoot账户的激活与解锁

    1.用sysz账户as sysddba登录,并执行scott.sql文件.我的文件目录是C:\oraclexe\app\oracle\product\11.2.0\server\rdbms\admin ...

  9. 点击按钮div显示,点击div或者document,div隐藏

    $("button").click(function(event){ event.stopPropagation(); if($("div").is(':hid ...

  10. checkbox点击后出现div

    HTML: <div class="msg_editUrl_function"> <label class="labelChecked" fo ...