android艺术探索学习1---Activity生命周期
android艺术探索学习2---Activity4种启动模式以及Flags
艺术探索里面对activity的生命周期的分析主要是正常和异常两种情况。
如上图所示,activity的生命周期,主要有启动和销毁两个过程:启动时要走的生命周期方法是onCreate()-->onStart()-->onResume();销毁时要走的生命周期方法是onPause()-->onStop()-->onDestory()。其中启动和销毁的方法是一一对应的,效果刚好是相反的:onCreate()和onDestory()对应的是创建和销毁;onStart()和onStop()对应的是前者是activity可见时调用的,后者是activity不可见调用;onResume()和onPause()对应的是前者是activity置于前台调用的,后者是activity没有置于前台时调用。
一、activity的正常生命周期
正常的生命周期情况1:启动一个应用程序activity调用的方法是onCreate()-->onStart()-->onResume();然后按回退键退出应用程序,activity调用的生命周期方法是:onPause()-->onStop()-->onDestory()。
正常的生命周期情况2:从activityA跳转到activityB,这时,会先调用A的onPause()方法,然后调用B的onCreate()-->onStart()-->onResume()方法,最后再调用A的onPause()方法(这时取决于activity的启动模式,默认的启动模式standard,会将A放到activity的栈中);如果按返回键从B返回到A,调用生命周期的方法是先调用B的onPause(),然后调用A的onReStart()-->onStart()-->onResume(),最后再调用B的onStop()-->onDestory()。
二、activity异常的生命周期
异常的生命周期应用因为某种非正常原因被关闭,然后系统又重启应用(也有可能没有重启应用)。
异常的生命周期主要就是设备的配置发生改变时,activity被杀死并重新创建,这个是activity先走一个销毁的生命周期onPause()-->onStop()-->onDestory(),然后再走一个启动的生命周期onCreate()-->onStart()-->onResume()。
这里和正常的生命周期调用的方法是一样的,之所以称之为异常,是因为---横竖屏切换后,它还是停留在当前页面,对用户来说,是不应该有变化的,但是实际是已经把切换前activity销毁了,看到是一个新的activity。也就是说,如果用户正在这个页面做一些操作,比如填写一些数据,突然横竖切换了,那重新创建的activity就没有了这些数据。
这里介绍一个与生命周期比较相关的方法:onSaveInstanceState()。在activity执行onStop()方法前,会调用onSaveInstanceState()方法,这个方法的作用就是保存一些activity的状态到Bundle中,当activity重新创建时,就可以利用onCreate方法传入的Bundle,来恢复activity销毁前的状态。具体实现代码如下(代码的实现是使用kotlin语言实现的):
/**
* 保存状态
*/
override fun onSaveInstanceState(outState: Bundle?) {
super.onSaveInstanceState(outState)
//保存到bundle中
outState?.putString("saveState",et.text.toString())
Log.e(TAG,"onSaveInstanceState")
}
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
if(savedInstanceState!=null){
//提取保存的bundle
et.setText(savedInstanceState?.getString("saveState"))
}
}
在《android艺术探索》这本书里对activity的生命周期有更详细的介绍,我这里只是挑选了大概的一些实际情况中使用的情况来简略描述了下,如果需要更深入,请看《android艺术探索》。