rializable
深⼊理解Activity的⽣命周期
twt之前学习安卓的时候只是知道⽣命周期是什么,有哪⼏个,但具体的详细的东西却不知道,后来看过《Android开发艺术探索》和⼤量博客之后,才觉得⾃⼰真正有点理解⽣命周期,本⽂是我对⽣命周期的认识的总结。
废话少说先上图。
图⽚来⾃于⽹络
相信学习安卓的⼈对这幅图都很熟悉,这是安卓Activity的⽣命周期活动图,详细⽽直观得表现了Activity各⽣命周期间的关系。下⾯我来通过问答的⽅式来谈谈我对它们的认识。
重金兼紫1.⽣命周期中各个⽅法的含义和作⽤
(1)onCreate:create表⽰创建,这是Activity⽣命周期的第⼀个⽅法,也是我们在android开发中接触的最多的⽣命周期⽅法。它本⾝的作⽤是进⾏Activity的⼀些初始化⼯作,⽐如使⽤tContentView加载布局,对⼀些控件和变量进⾏初始化等。但也有很多⼈将很多与初始化⽆关的代码放在这,其实这是不规范的。此时Activity还在后台,不可见。所以动画不应该在这⾥初始化,因为看不到……
(2)onStart:start表⽰启动,这是Activity⽣命周期的第⼆个⽅法。此时Activity已经可见了,但是还没出现在前台,我们还看不到,⽆法与Activity交互。其实将Activity的初始化⼯作放在这也没有什么问题,放在onCreate中是由于官⽅推荐的以及我们开发的习惯。
(3)onResume:resume表⽰继续、重新开始,这名字和它的职责也相同。此时Activity经过前两个阶段的初始化已经蓄势待发。Activity在这个阶段已经出现在前台并且可见了。这个阶段可以打开独占设备
the namir
(4)onPau:pau表⽰暂停,当Activity要跳到另⼀个Activity或应⽤正常退出时都会执⾏这个⽅法。此时Activity在前台并可见,我们可以进⾏⼀些轻量级的存储数据和去初始化的⼯作,不能太耗时,因为在跳转Activity时只有当⼀个Activity执⾏完了onPau⽅法后另⼀个Activity 才会启动,⽽且android中指定如果onPau在500ms即0.5秒内没有执⾏完毕的话就会强制关闭Activity。从⽣命周期图中发现可以在这快速重启,但这种情况其实很罕见,⽐如⽤户切到下⼀个Activity的途中按back键快速得切回来。
(5)onStop:stop表⽰停⽌,此时Activity已经不可见了,但是Activity对象还在内存中,没有被销毁。这个阶段的主要⼯作也是做⼀些资源的回收⼯作。
formerly
(6)onDestroy:destroy表⽰毁灭,这个阶段Activity被销毁,不可见,我们可以将还没释放的资源释放,以及进⾏⼀些回收⼯作。
(7)onRestart:restart表⽰重新开始,Activity在这时可见,当⽤户按Home键切换到桌⾯后⼜切回来或者从后⼀个Activity切回前⼀个Activity就会触发这个⽅法。这⾥⼀般不做什么操作。
driving图⽚来⾃⽹络
通过上⾯的了解我们发现其实Activity中的⽅法⼤都是两两对应的,只有onRestart⽅法散发着单⾝狗的清⾹。
那么相邻的⽅法之间有什么区别呢?
(1)可见与不可见的区别。前者不可见,后者可见。
(2)执⾏次数的区别。onCreate⽅法只在Activity创建时执⾏⼀次,⽽onStart⽅法在Activity的切换以及按Home键返回桌⾯再切回应⽤的过程中被多次调⽤。因此Bundle数据的恢复在onStart中进⾏⽐onCreate中执⾏更合适。
born(3)onCreate能做的事onStart其实都能做,但是onstart能做的事onCreate却未必适合做。如前⽂所说的,tContentView和资源初始化在两者都能做,然⽽想动画的初始化在onStart中做⽐较好。
(1)是否在前台。onStart⽅法中Activity可见但不在前台,不可交互,⽽在onResume中在前台。
(2)职责不同,onStart⽅法中主要还是进⾏初始化⼯作,⽽onResume⽅法,根据官⽅的建议,可以做开启动画和独占设备的操作。
(1)是否可见。onPau时Activity可见,onStop时Activity不可见,但Activity对象还在内存中。
(2)在系统内存不⾜的时候可能不会执⾏onStop⽅法,因此程序状态的保存、独占设备和动画的关闭、以及⼀些数据的保存最好在onPau中进⾏,但要注意不能太耗时。
onStop阶段Activity还没有被销毁,对象还在内存中,此时可以通过切换Activity再次回到该Activity,⽽onDestroy阶段Acivity被销毁
6.为什么切换Activity时各⽅法的执⾏次序是英语学习网站推荐
(A)onPau→(B)onCreate→(B)onStart→(B)onResume→(A)onStop⽽不是(A)onPau→(A)onStop→(B)onCreate→(B)onStart→(B)onResume复旦大学怎么样
(1)⼀个Activity或多或少会占有系统资源,⽽在官⽅的建议中,onPau⽅法将会释放掉很多系统资源,为切换Activity提供流畅性的保障,⽽不需要再等多两个阶段,这样做切换更快。
(2)按照⽣命周期图的表⽰,如果⽤户在切换Activity的过程中再次切回原Activity,是在onPau⽅法后直接调⽤onResume⽅法的,这样⽐onPau→onStop→onRestart→onStart→onResume要快得多。
7.与⽣命周期密切相关的onSaveInstanceState⽅法和
onRestoreInstanceState⽅法在什么时候执⾏?
通过阅读源码会发现,当targetSdkVersion⼩于3时onSaveInstanceState是在onPau⽅法中调⽤的,⽽⼤于3时是在onStop⽅法中调⽤的。
amount⽽onRestoreInstanceState是在onStart之后、onResume之前调⽤的。