
Android使用任务栈来管理活动,
1.活动状态
运行状态:一个活动位于返回栈的栈顶,活动就处于运行状态
暂停状态:不再处于栈顶位置,但任然可见时
停止状态:不再处于栈顶位置,完全不可见
销毁状态:从返回栈中移除
onCreate() 活动第一次被创建的时候调用,完成活动的初始化操作
onStart()活动由不可见到可见的时候
onResume() 活动准备好和用户交互的时候调用,此时活动处于返回栈的栈顶,并且处于运行状态
onPause() 系统准备去启动或者恢复一个活动时候调用
onStop()在活动完全不可见的时候调用,它与onPause的区别是,如果被调用的是个对话框式的活动,onpause会被执行,而onStop不会执行
onDestroy是在活动被销毁之前,之后活动的转态变为销毁状态
onRestart由停止状态到运行状态
完整生存期:onCreate到onDestroy
可见生存期:onStart到onStop
前台生存期:onResume到onPause
举个例子:
这里的normal是普通活动
dialog是主题为@style/Theme.AppCompat.Dialog的对话框活动
normal.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,NormalActivity.class);
startActivity(intent);
}
});
dialog.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,DialogActivity.class);
startActivity(intent);
}
});
@Override
protected void onStart() {
super.onStart();
Log.e(TAG, "onStart: " );
}
@Override
protected void onResume() {
super.onResume();
Log.e(TAG, "onResume: " );
}
@Override
protected void onPause() {
super.onPause();
Log.e(TAG, "onPause: " );
}
@Override
protected void onStop() {
super.onStop();
Log.e(TAG, "onStop: " );
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.e(TAG, "onDestroy: " );
}
@Override
protected void onRestart() {
super.onRestart();
Log.e(TAG, "onRestart: " );
}
运行结果:
刚进入界面时

点击normal按钮时

返回时

点击dialog按钮时

点击返回

再返回

2.切换横竖屏时的Activity生命周期
当不设置android:configChanges
1.切横屏时:
onSavedInstanceState()->onPause()->onStop()->onDestroy()->onCreate()->onStart()->onRestoreInstance()->onResume();
2.切竖屏时:执行2次
onSavedInstanceState()->onPause()->onStop()->onDestroy()->onCreate()->onStart()
->onRestoreInstance()->onResume();
设置android:configChanges="orientation"
切横竖屏只会执行一次
切换横竖屏时,想保留页面数据,可以通过重写onSavedInstanceState()实现
想恢复数据:通过重写onRestoreInstanceState()方法
网友评论