一、正常状况下AcTIvity的生命周期:
AcTIvity的生命周期大约能够归为三部分
整个的生命周期:onCreate()能够设置一切的“大局”状况, onDestory()能够开释一切的资源
可见的生命周期:onStart()显现给用户的UI数据和资源等, onStop()当不再需求显现时分,能够开释资源
前台的生命周期:该生命周期活泼,onResume()回到前台,onPause()不行见状况或被掩盖
不要在onCreate()办法中履行耗时的操作,onStart()及onResume()不行进行过多操作,否则翻开桌面运用图标会卡顿。
(1)onCreate:表明AcTIvity正在被创立。能够调用setContentView加载布局资源、初始化各控件、设置监听、并初始化一些大局的变量。由于在AcTIvity的一次生命周期中,onCreate办法只会履行一次。在Paused和Stopped状况下康复或重启的下,这些控件、监听和大局变量也不会丢掉。即便是内存不足,被收回了,再次Recreate的话,又是一次新的生命周期的开端,又会履行onCreate办法。
(2)onRestart:表明Activity正在从头发动。当处于非栈顶状况的活动需求再次回来栈顶,展示给用户的时分,触发该办法。调用的场景首要有:home键之后,然后切换回来、Activity跳转到另一个Activity之后,按back键回来本来Activity。很少调用,由于它只在onStop之后才或许调用,所以操作放在onStart办法里边就比较好。
(3)onStart:表明Activity正在发动,这时Activity现已可见,可是还没有出现在前台,还无法和用户交互。
(4)onResume:表明Activity现已可见了,而且出现在前台并开端活动。
(5)onPause:表明Activity正在中止,正常状况下,onStop会接着调用,可是翻开的是通明的Activity,不会调用onStop,回来会调用onResume。能够履行一些轻量级的开释作业(耗时会影响到新的Activity显现,onPause有必要履行完,新Activity的生命周期才会履行)例如:中止动画、撤销broadcast receivers等。
(6)onStop:表明Activity即将中止,极有或许被体系所收回,在某些极点状况下,体系或许是直接杀死运用程序的进程,而不是调用onDestory办法,所以咱们需求在onStop办法中尽或许的开释那些用户暂时不需求运用的资源,避免内存走漏。能够做一些略微重量级的收回作业,例如:数据保存,需求用到的数据库操作。
(7)onDestory:表明Activity将被毁掉,确认某些资源是否没有被开释,做一些终究的整理作业,比方在这个Activity的onCreate中敞开的某个线程,那么就要在onDestory中确认它是否完毕了,假如没有,就完毕它。
几种生命周期流程的状况:
(1)现在有两个Activity,A 和B,都重写了一切的生命周期办法。
进入A,回调:AonCreate–>AonStart–>AonResume。回来桌面:AAonPause–>AonStop。
点击按钮进入B,回调:AonPause–>BonCreate–>BonStart–>BonResume–>AonStop。
按下back键,回调:BonPause–>AonRestart–>AonStart–>AonResume–>BonStop–>BonDestory
(2)发动对话框款式的Activity,有两个Activity,A 和B(对话框式Activity)。
从A进入B,回调:AonPause–>BonCreate–>BonStart–>BonResume ,并不会调用onStop。
按下back键,BonPause–>AonRestart–>AonStart–>AonResume–>BonStop–>BonDestory回调:BonPause–>AonResume–>BonStop–>BonDestory。
发动对话框并不会有生命周期的改动,这儿发动的是通明主题的Activity。
二、关于SaveStateInstance
体系配置产生改动后或内存瓶颈时,生命周期产生反常,会调用onSaveInstanceState和onRestoreInstanceState这两兄弟,这就很好的处理Android运用的内存问题。
旋转屏幕时,生命周期大约如下图(若不想,可在清单文件设置android:configChanges="orientation|keyboardHidden|locale"):
onSaveInstanceState:在Activity(onStop之前)被收回之前,体系会调用onSaveInstanceState(Bundle outState)来保存View的状况,并到传入的outState目标中。
onRestoreInstanceState:在Activity被从头创立时,会经过onCreate(Bundle savedInstanceState)和onRestoreInstanceState(Bundle savedInstanceState)传入保存的状况信息并康复View的状况。(onCreate首要重建Fragment、onRestoreInstanceState康复Window状况)
View控件的状况被保存需求满意两个条件:
1、View有仅有的ID;
2、View的初始化时要调用setSaveEnabled(true)
View控件康复的留意三点:
1、假如id重复,则View的状况会被掩盖
2、被保存的Fragment会在onCreate中被主动创立和添加到FragmentActivity中
3、被保存的View不会被主动创立,仅仅经过id获取savedInstance用于更新View