Activity的生命周期
Activity的状态:
1、运行状态:用户可以看到,并且可以进行交互,位于最顶层的Activity;
2、停止状态:没有退出,被完全覆盖或者按下home键,它的状态信息和数据都还保留着,一旦内存不足,将会被销毁;
3、暂停状态:部分被覆盖,或者锁屏, 它的状态信息和数据都还保留着,内存不足时可能会销毁(几率要比停止状态小);
4、销毁状态:系统销毁或者人为的销毁
一个Activity从被创建到被销毁执行的生命周期方法
onCreate方法:Activity的初始化
onStart方法:Activity显示了,但是不能交互
onRestoreInstanceState:该方法用于恢复数据,当被系统销毁的activity又被系统重新创建时(屏幕的横竖屏切换:先销毁当前的activity在创建一个新的activity),执行该方法(在onResume之前执行);
onResume方法:进入运行状态,可以进行交互
onRestart方法:重新启动
onPause方法:暂停,Activity失去焦点了
onSaveInstanceState:用于保护activity的状态信息,当一个activity变的容易被销毁,比如按下home键,长按home键,内存不足,启动另一个activity,在这种状态下,希望activity在被系统销毁之前保存相关的数据,那么就使用这个方法(此方法在onPause之后,onStop之前执行);
onStop:停止,被完全覆盖或者按下home键
onDestory:销毁状态,Activity彻底清除
在清单文件中加入配置android:configChanges = “keyboard|screenSize|orientation”,可使横竖屏切换时就直接使用当前的activity对象,不会再进行销毁重建当前activity,但是会回调onConfigurationChanged()方法
onConfigurationChanged方法中判断屏幕是否横屏
一个Activity进入到执行状态时执行的方法:onCreate(),onStart(),onPresume()
一个Actvity从运行到销毁的状态:onPause()、onStop()、onDestory()
一个Actvity进入另一个Actvity:
从MainActivity进入到OtherActivity:MainActivityxian'zhi'xing先执行onPause(),然后OtherActivity执行onCreate()、onStrat()、onResume()、然后MainActivity执行Stop();
按返回键Activity的执行状态
从OtherActivity回到MainActivity:OtherActivity先执行onPause(),然后MainActivity执行onRestart(),onStart(),onResume(),然后OtherActivity执行onStop(),onDestroy()
下面从书中找了张图,感觉更明了:
如何利用onSaveInstanceState保存关闭当前activity之前的数据:
使用系统传过来的Bundle对象
outState.putString(“title”,”this is a title”);
恢复数据:onCreate方法中
if(savedInstanceState!=null){
String value = savedInstanceState.getString(“title”);
}