赞
踩
首先看一下Android api中所提供的Activity生命周期图:
只看图片并不会清楚它的运行机制,有了下面的解释就会豁然开朗了。
先看一下谷歌的API解释:
方法 | 描述 | 是否可以终止 | 下一个方法 | ||
当Activity程序启动之后会首先调用此方法。在这个方法体里,你需要完成所有的基础配置——创建视图,连接数据库并将数据绑定到list列表中,等等。这个方法会传递一个保存了此Activity上一状态信息的Bundle对象。紧随其后的方法总是 | 不可以 | | |||
| 处于停止态的Activity调用此方法,可以让此Activity重新显示在前台。 紧随其后的方法总是 | 不可以 | | ||
在此Activity可见(显示在前台)之前调用。 如果接着是显示在前台,紧随其后的方法是 | 不可以 | | |||
| 在与用户进行交互之前调用此方法,这一时刻Activity位于activity栈的栈顶,在等待用户的操作(输入数据或点击按钮等)。紧随其后的方法是 | 不可以 | |||
当启动其他activity时调用此方法。在这个方法体里,通常用于提交未保存的数据、停止动画/视频和处理其他占用CPU资源的程序,等等。同时在这个方法体里处理的都是一些迅速快捷的操作,因为下一个activity会在onPause() 如果此Activity重新回到前台显示,则紧随其后的方法是 | 可以 | | |||
当Activity不可见时调用此方法。这个方法的调用时刻是在Activity需要销毁或者被其他otherActivity取代且覆盖此Activity在前台显示时调用。 如果此Activity重新显示在前台,紧随其后的方法是 | 可以 | | |||
Activity被销毁时调用此方法。这是Activity生命周期里最后调用的一个方法。这个方法的调用可以发生在activity调用了finish()方法之后,或者是系统为了节省空间而销毁了此Activity的实例。你可以使用isFinishing()方法来区分这两种情况。 | 可以 | —— |
在实际应用场景中,假设A Activity位于栈顶,此时用户操作,从A Activity跳转到B Activity。那么对AB来说,具体会回调哪些生命周期中的方法呢?回调方法的具体回调顺序又是怎么样的呢?
开始时,A被实例化,执行的回调有A:onCreate -> A:onStart -> A:onResume。
当用户点击A中按钮来到B时,假设B全部遮挡住了A,将依次执行A:onPause -> B:onCreate -> B:onStart -> B:onResume -> A:onStop。
此时如果点击Back键,将依次执行B:onPause -> A:onRestart -> A:onStart -> A:onResume -> B:onStop -> B:onDestroy。
至此,Activity栈中只有A。在Android中,有两个按键在影响Activity生命周期这块需要格外区分下,即Back键和Home键。我们先直接看下实验结果:
此时如果按下Back键,系统返回到桌面,并依次执行A:onPause -> A:onStop -> A:onDestroy。
此时如果按下Home键(非长按),系统返回到桌面,并依次执行A:onPause -> A:onStop。由此可见,Back键和Home键主要区别在于是否会执行onDestroy。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。