Activity的生命周期

时间:2022-10-08 14:44:34
Activity的生命周期 Activity的生命周期


Activity的生命周期


1. Activty 状态  
Resumed状态 在这种状态下,该Activity在前台运行,用户可以与它进行交互。(有时也简称为“running”状态。)
Paused状态 在这种状态下,该Activity被部分遮蔽(被其他在前台的半透明或不覆盖整个屏幕的活动遮住)。此状态不接受用户输入,并且不能执行任何代码
Stopped状态 在这种状态下,该活动是完全隐藏,不可见的,可视为存在于后台。虽然停止,活动实例和所有成员变量如状态信息将被保留,但不能执行任何代码
2. Activity生命周期方法执行顺序  
1. 完整的生命周期方法(启动,退出一个Activity) onCreate()onSatrt()onResume()onPause()onStop()onDestory()
2.进入Paused状态(打开一个DialogTheme的Activity)
1. 启动Activity onCreate()onSatrt()onResume()
2. 启动DialogThemeActivity
onPause()D-onCreate()D-onSatrt()D-onResume()
3. 退出DialogThemeActivity D-onPause()onResume()D-onStop()D-onDestroy()
3.进入Stopped状态(打开第二个Activity)
1. 启动Activity onCreate()onSatrt()onResume()
2. 启动第二个Activity onPause()S-onCreate()S-onSatrt()S-onResume()onStop()
3.结束第二个Activity S-onPause()onRestart()onStart()onResume()S-onStop()S-onDestroy()
4.进入Stopped状态(进入桌面或锁屏)
1. 启动Activity onCreate()onSatrt()onResume()
2 打开桌面或锁屏 onPause()onStop()
5.横竖屏切换 销毁当前Activity Destory,并重新启动这个Activity Createandroid:configChanges="orientation|keyboardHidden" android:configChanges="orientation|keyboardHidden|screenSize"

3. Activity的生命周期    
onCreate() 设置Activity显示的布局界面,初始化UI组件,变量
onStart() 初始化资源
onResume() 开始动画与初始化那些只有在获取用户焦点时才需要的组件
onPause() 1.停止会耗费CPU的动画或者是其他正在运行的操作。
2.提交没有保存的改变,但是仅仅是在用户离开时期待保存的内容(例如邮件草稿)。
3.释放系统资源,例如广播接收器, 传感器(如GPS), 或者是其他任何当你的activity暂停时会影响到电量而用户并不需要的资源

4.避免在onPause()时执行CPU密集的工作,例如写数据到数据库,因为它会导致切换到下一个activity的可视过程变得缓慢(那些重负荷的操作应该放到onStop()方法中完成)。
onStop() onStop()来执行CPU密集型的关闭操作,例如把数据写入数据库。onStop()来释放资源,从而避免内存泄漏。
onDestory() onDestory方法是最后的去清除那些可能导致内存泄漏的地方,因此需要确保添加的线程都被销毁并且所有像方法跟踪之类的长效操作都被停止。
4. onSaveInstanceState(现场保护)  
当系统“未经你许可”时销毁了你的activity,则onSaveInstanceState会被系统调用,因为它必须要提供一个机会让你保存你的数据
保存数据  @Override protected void onSaveInstanceState(Bundle outState) {  super.onSaveInstanceState(outState);  outState.putString("Key", "value");
 }
取出数据 @Override protected void onCreate(Bundle savedInstanceState) {  super.onCreate(savedInstanceState);  setContentView(R.layout.activity_main);   if (null != savedInstanceState) {   String string = savedInstanceState.getString("Key");   }  }