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():不可见
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等等,处理方法为先判断资源是否不为空,若不为空则代码释放资源,若不做处理就会造成内存泄漏,影响性能;