Android初学者大概都会学习到组件生命周期的知识,onCreate()->onstart()->onResume()->onPause()->onStop()->onDestroy() 的流程都已熟悉。最近在项目中碰到一个难解决的bug,最后发现原来跟组件生命周期有一定的关系,在此做一点分享。
单个Activity的生命周期,毫无疑问是按照上面的顺序来的,但是从一个Activity跳转到另一个Activity的过程中呢?是不是第一个Activity先走完onPause()->onStop->onDestroy()-> ,然后第二个Activity再走onCreate()->onStart()->onResume() ?
这应该属于正常思维,在昨天以前,我也一直以为生命周期是这样走的。可是小小实现一下,发现和预想中的有些差别。
代码很简单,在各个周期函数中打上log即可,就不贴出了。第一个Activity称为first,第二个Activity称为second。在first中添加一个按钮,点击后通过Intent跳转到second。打出log发现,从first跳转到second的流程如下:
-->first.onPause()
-->second.onCreate()
-->second.onStart()
-->second.onResume()
-->first.onStop()
也就是说第一个界面在执行完onPause()后,第二个界面就开始走onCreate()直到onResume()了,然后第一个界面继续走接下来的onStop()。如果是跳转后finish()掉第一个界面,还会往下走onDestroy();
在second点击back按钮,走的流程如下:
-->second.onPause()
-->first.onRestart()
-->first.onStart()
-->first.onResume()
-->second.onStop()
-->second.onDestroy()
同第一次跳转基本类似。
由以上的实验可知,当Activity进行跳转时,两个Activity的生命流程并不是按照直线顺序进行的,而是中间有一部分交错。头一个Activity走完onPause()后,第二个Activity就会走完它的生命周期,接着第一个Activity继续走onStop(),onDestroy()。
因此,在项目中应该注意在数据处理时考虑到生命周期的这一特性,避免造成错误。