安卓总结 Activity生命周期
2016-02-13 12:24
239 查看
偶然翻起去过去的笔试题,被一道activity的问题吸引。
1.Activity实例是由系统自动创建,并在不同的状态期间回调相应的方法。一个最简单的完整的Activity生命周期会按照如下顺序回调:onCreate -> onStart -> onResume -> onPause -> onStop -> onDestroy。称之为entire lifetime。
2.当执行onStart回调方法时,Activity开始被用户所见(也就是说,onCreate时用户是看不到此Activity的,那用户看到的是哪个?当然是此Activity之前的那个Activity),一直到onStop之前,此阶段Activity都是被用户可见,称之为visible lifetime。
3.当执行到onResume回调方法时,Activity可以响应用户交互,一直到onPause方法之前,此阶段Activity称之为foreground lifetime。
在实际应用场景中,假设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的生命周期分为:oncreate ,onstart,onresume,on pause,onstop,ondestroy。
第一点,onpause与onstop区别。这地方是最令初学者头疼的地方。官方的解释是 onpause是被覆盖,onstop是完全覆盖。后来研究知道,有些情况activity并没有完全占据整个屏幕,而是占据一部分(类似dialog或是半屏效果)。onstop没什么问题,就是正常启动新页面。所以以下两种情况只会调用onpause而不会调用onstop
1. 一个透明的包含Dialog的Activity 出现
2. 按poweroff锁屏
第二点:back健与home健区别,同时这也是onstop与ondestroy的区别。由于Android本身的特性,使得现在不少应用都没有直接退出应用程序的功能,按照一般的逻辑,当Activity栈中有且只有一个Activity时,当按下Back键此Activity会执行onDestroy,那么下次点击此应用程图标将从重新启动,因此,当前不少应用程序都是采取如Home键的效果,当点击了Back键,系统返回到桌面,然后点击应用程序图标,直接回到之前的Activity界面,这种效果是怎么实现的呢?
back健会执行ondestroy而home健只执行onstop方法。但是可以通过修改onbackpress方法来强行让back 健也不执行destroy方法。
1.Activity实例是由系统自动创建,并在不同的状态期间回调相应的方法。一个最简单的完整的Activity生命周期会按照如下顺序回调:onCreate -> onStart -> onResume -> onPause -> onStop -> onDestroy。称之为entire lifetime。
2.当执行onStart回调方法时,Activity开始被用户所见(也就是说,onCreate时用户是看不到此Activity的,那用户看到的是哪个?当然是此Activity之前的那个Activity),一直到onStop之前,此阶段Activity都是被用户可见,称之为visible lifetime。
3.当执行到onResume回调方法时,Activity可以响应用户交互,一直到onPause方法之前,此阶段Activity称之为foreground lifetime。
在实际应用场景中,假设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的生命周期分为:oncreate ,onstart,onresume,on pause,onstop,ondestroy。
第一点,onpause与onstop区别。这地方是最令初学者头疼的地方。官方的解释是 onpause是被覆盖,onstop是完全覆盖。后来研究知道,有些情况activity并没有完全占据整个屏幕,而是占据一部分(类似dialog或是半屏效果)。onstop没什么问题,就是正常启动新页面。所以以下两种情况只会调用onpause而不会调用onstop
1. 一个透明的包含Dialog的Activity 出现
2. 按poweroff锁屏
第二点:back健与home健区别,同时这也是onstop与ondestroy的区别。由于Android本身的特性,使得现在不少应用都没有直接退出应用程序的功能,按照一般的逻辑,当Activity栈中有且只有一个Activity时,当按下Back键此Activity会执行onDestroy,那么下次点击此应用程图标将从重新启动,因此,当前不少应用程序都是采取如Home键的效果,当点击了Back键,系统返回到桌面,然后点击应用程序图标,直接回到之前的Activity界面,这种效果是怎么实现的呢?
back健会执行ondestroy而home健只执行onstop方法。但是可以通过修改onbackpress方法来强行让back 健也不执行destroy方法。
@Override publicvoid onBackPressed() { Intent home = new Intent(Intent.ACTION_MAIN); home.addCategory(Intent.CATEGORY_HOME); startActivity(home); } 当然,此种方式通过Home键效果强行影响到Back键对Activity生命周期的影响。注意,此方法只是针对按Back键需要退回到桌面时的Activity且达到Home效果才重写。或者,为达到此类效果,Activity实际上提供了直接的方法。
1 activity.moveTaskToBack(true);moveTaskToBack()此方法直接将当前Activity所在的Task移到后台,同时保留activity顺序和状态
第三点:finish方法与destroy方法。finish是在appmanage栈中移除,destrop是释放内存,当然finish 会调用destroy方法。类似于c++的delete函数与free函数。(delete后free) 参考链接:(http://www.cnblogs.com/lwbqqyumidi/p/3769113.html)
相关文章推荐
- 网页闯关游戏(riddle webgame)--游戏玩法和整体介绍
- hdu 1520 树形dp
- bzoj1831【AHOI2008】逆序对
- POJ 3468_A Simple Problem with Integers(树状数组)
- POJ 3468_A Simple Problem with Integers(树状数组)
- Android屏幕适配全攻略
- POJ 2239 Selecting Courses(二分图最大匹配)
- 《VMWARE核心技术网卡三种模式》
- 多人聊天室
- HDU-1012-u Calculate e( C++ && 2000年纽约水果)
- 查看Eclipse版本号,及各个版本区别
- 查看Eclipse版本号,及各个版本区别
- Ubuntu14.04 下apt-get安装Code::Blocks
- 蓝桥杯 历届试题 错误票据
- uvaoj-401:回文词
- TensorFlow在图像识别中的应用
- javaWeb笔记(六) 分页 显示分页页码列表
- uva10859 - Placing Lampposts
- 2的次幂表示 蓝桥杯
- 异步登录