Activity各种特殊情况下的生命周期流程以及Activity重难点问题
2016-10-16 13:37
281 查看
1.ActivityA创建,然后ActivityA跳转到ActivityB,然后从ActivityB返回ActivityA过程中两个Activity的生命周期流程?
onCreate(A)->onStart(A)->onResume(A)->onPause(A)->onCreate(B)->onStart(B)->onResume(B)->onStop(A)->onPause(B)->onRestart(A)->onStart(A)->onResume(A)->onStop(B)->onDestroy(B)
当Activity的onStop()方法被调用后,Activity退入了后台,如果这时有其它优先级高的程序需要内存,Activity很可能被杀死。如果Activity被杀死,则从ActivityB返回ActivityA后Activity需要重新创建;如果ActivityA没有被杀死,则从ActivityB返回ActivityA遵循上面的生命周期流程。
2.ActivityA创建,然后切换成横屏的生命周期流程?横竖屏切换时怎样在onSaveInstanceState()方法中保存数据以供重新创建Activity时恢复使用?
没有写onSaveInstanceState()方法的情况:onCreate()->onStart()->onResume()->onPause()->onStop()->onDestroy()->onCreate()->onStart()->onResume(),即横竖屏切换时会先销毁当前Activity,再重新创建一个横/竖屏。
写了onSaveInstanceState()方法的情况:onCreate()->onStart()->onResume->onPause()->onSaveInstanceState()->onStop()->onDestroy()->onCreate()->onStart()->onResume()。
在onSaveInstanceState()方法中保存数据:
protected void onSaveInstanceState(Bundle outState){
super.onSaveInstanceState(outState);
outState.putString("name","KM");
}
在onCreate()方法中取出onSaveInstance()方法保存的数据:
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
if(savedInstanceState!=null){
String s=savedInstanceState.getString("name");//得到s的值为KM
}
}
3.Activity生命周期方法调用时界面是否可见?
onCreate():不可见
onStart()、onResume():可见
onPause():部分可见
onStop():隐藏
onDestroy():不可见
4.为什么ActivityA启动ActivityB要设计成先执行onPause()方法,再创建ActivityB,而不是设计成先创建ActivityB再执行onPause()方法?
试想这样一个例子,ActivityA正在播放视频,这时打入一个电话,即ActivityB,如果不先执行onPause()方法就会造成,ActivityB显示的同时,还能听见ActivityA播放的视频声音。
5.为什么ActivityA启动ActivityB的生命周期要设计成onPause(A)->onCreate(B)->onStart(B)->onResume(B)->onStop(A),而不设计成onPause(A)->onStop()->onCreate(B)->onStart(B)->onResume(B)?
因为ActivityA的onStop()方法执行之后,ActivityA将处于不可见状态,这时如果被ActivityA启动的ActivityB由于某些原因闪退掉,则ActivityA和ActivityB均不可见,呈现在用户眼前的将没有任何界面,影响用户体验。
6.ActivityA启动ActivityB时,在ActivityA的onPause()方法中做哪些操作?
在onPause()方法中判断当前视频、音频是否正在播放,如果是则做暂停播放处理
7.Activity的onDestroy()方法有什么作用?
释放在Activity中创建的资源,如Handler、ContentProvider或者MediaPlayer等等,处理方法为先判断资源是否不为空,若不为空则代码释放资源,若不做处理就会造成内存泄漏,影响性能;
onCreate(A)->onStart(A)->onResume(A)->onPause(A)->onCreate(B)->onStart(B)->onResume(B)->onStop(A)->onPause(B)->onRestart(A)->onStart(A)->onResume(A)->onStop(B)->onDestroy(B)
当Activity的onStop()方法被调用后,Activity退入了后台,如果这时有其它优先级高的程序需要内存,Activity很可能被杀死。如果Activity被杀死,则从ActivityB返回ActivityA后Activity需要重新创建;如果ActivityA没有被杀死,则从ActivityB返回ActivityA遵循上面的生命周期流程。
2.ActivityA创建,然后切换成横屏的生命周期流程?横竖屏切换时怎样在onSaveInstanceState()方法中保存数据以供重新创建Activity时恢复使用?
没有写onSaveInstanceState()方法的情况:onCreate()->onStart()->onResume()->onPause()->onStop()->onDestroy()->onCreate()->onStart()->onResume(),即横竖屏切换时会先销毁当前Activity,再重新创建一个横/竖屏。
写了onSaveInstanceState()方法的情况:onCreate()->onStart()->onResume->onPause()->onSaveInstanceState()->onStop()->onDestroy()->onCreate()->onStart()->onResume()。
在onSaveInstanceState()方法中保存数据:
protected void onSaveInstanceState(Bundle outState){
super.onSaveInstanceState(outState);
outState.putString("name","KM");
}
在onCreate()方法中取出onSaveInstance()方法保存的数据:
protected void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
if(savedInstanceState!=null){
String s=savedInstanceState.getString("name");//得到s的值为KM
}
}
3.Activity生命周期方法调用时界面是否可见?
onCreate():不可见
onStart()、onResume():可见
onPause():部分可见
onStop():隐藏
onDestroy():不可见
4.为什么ActivityA启动ActivityB要设计成先执行onPause()方法,再创建ActivityB,而不是设计成先创建ActivityB再执行onPause()方法?
试想这样一个例子,ActivityA正在播放视频,这时打入一个电话,即ActivityB,如果不先执行onPause()方法就会造成,ActivityB显示的同时,还能听见ActivityA播放的视频声音。
5.为什么ActivityA启动ActivityB的生命周期要设计成onPause(A)->onCreate(B)->onStart(B)->onResume(B)->onStop(A),而不设计成onPause(A)->onStop()->onCreate(B)->onStart(B)->onResume(B)?
因为ActivityA的onStop()方法执行之后,ActivityA将处于不可见状态,这时如果被ActivityA启动的ActivityB由于某些原因闪退掉,则ActivityA和ActivityB均不可见,呈现在用户眼前的将没有任何界面,影响用户体验。
6.ActivityA启动ActivityB时,在ActivityA的onPause()方法中做哪些操作?
在onPause()方法中判断当前视频、音频是否正在播放,如果是则做暂停播放处理
7.Activity的onDestroy()方法有什么作用?
释放在Activity中创建的资源,如Handler、ContentProvider或者MediaPlayer等等,处理方法为先判断资源是否不为空,若不为空则代码释放资源,若不做处理就会造成内存泄漏,影响性能;
相关文章推荐
- Activity 生命周期 ——各种情况测试
- fragment各种情况下的生命周期、状态保存startActivityForResult是哪个类的方法,在什么情况下使用?
- android activity生命周期以及横竖屏切换问题
- Spring.NET 中配置 ashx 的映射,以及其它各种映射的处理 的特殊情况
- Linux管理工作,实例讲解工作中使用ssh证书登录的实际流程,讲解ssh证书登录的配置原理,基于配置原理,解决实际工作中,windows下使用SecureCRT证书登录的各种问题,以及实现hadoo
- Activity 各种情况下的生命周期总结
- Activity生命周期(包括横竖屏时特殊情况)
- Activity的生命周期以及两个activity之间跳转的问题
- 【亲测】Activity中的 ConfigChanges 属性以及横竖屏切换时候 Activity 的生命周期
- ASP.NET安全问题--ASP.NET生命周期中的验证以及身份验证模块
- IT168转载问题解决情况,以及本人博客转载方式
- Activity和Window以及View之间的聚合关系及创建流程
- Android Activity生命周期以及LoCat的使用
- 编程解决各种问题(一) ----------------Flash 经典智力游戏(一) 人羊菜以及狼的故事
- 平台移植的各种情况 --- 关于 protobuf的编译、安装,以及开发
- 第一个DWR程序以及其中会遇到的各种问题
- Activity详解(生命周期、以各种方式启动Activity、状态保存,完全退出等)
- C/C++ 标准以及各种编译器对标准的支持情况(不断完善中)
- C/C++ 标准以及各种编译器对标准的支持情况(不断完善中)
- Activity生命周期的学习以及Logcat的使用 推荐