处理Activity的生命周期事件

 

 

这是官网的Activity生命周期结构图,从这个图中能够看出Activity的生命周期函数挺多的,其实他的生命周期和以往咱们看到的其余组件的生命周期同样,都是从建立到销毁的过程,只不过之间多加了几个生命周期函数,将他的生命周期细化了。android

首先看到的事onCreate()函数,顾名思义这个函数在Activity开始建立时调用,能够在其中定义一些初始化操做。接下来是onStart()方法,这个方法在Activity开始被执行时调用,它紧随onCreate()方法以后调用,接着是onResume()方法,这个方法对咱们来讲算是比较陌生的,这个方法是在该Activity或得用户输入焦点时被调用,这个或得用户输入焦点有点很差理解,若是咱们用过Android手机或者其余系统的手机时,常常会看到有些窗口虽然能看到但没法对他进行操做,这时的Activity就没有或得用户焦点。当这个方法调用后Activity开始真正的运行了,在Activity正在运行时用户激活了另外一个Activity,这时将调用第一个Activity的onPause()方法,能够理解为第一个Activity被暂停了,这个时候若是系统的内存不够用(手机内存不够用的状况常常发生),第一个Activity的进程可能被杀死(什么时候被杀死是由系统决定的,不须要咱们参入),当下次咱们再运行第一个Activity时就须要从新建立这个Activity,那就又须要调用onCreate()方法。若是在这个Activity没有被杀死的状况下,咱们从新调用第一个Activity,就会直接调用它的onResume()方法后开始运行。若是第一个Activity好久都没有获得再次运行机会,就会调用onStop()被中止,这时若是Activity又或得用户输入焦点,就会调用onRestart()方法,从新开始执行这个Activity,或者被系统杀死,不然调用onDestroy()方法销毁Activity。这整个过程看起来有点绕,其实在实际开发中咱们不多会用到全部的生命周期函数,但咱们要弄清它的原理,在使用时知道因此然就好了。函数

 ------------------------------------------------------------------------------------------------------------------------------------------spa

一些Activity可能比另一些要重要,好比一个打进来的电话比正在玩的游戏重要;另外,android做为手机系统,内存小于台式机或者笔记本。线程

有时,当前的Activity可能会发现被关闭,是由于其余Activity须要运行,系统须要当前Activity释放内存资源。能够将这些看作是生命周期,当前的Activity消亡了,其余的则活了。对象

Activity的状态生命周期

  1. 活跃的(active):用户启动了Activity,并正在前台运行中;
  2. 暂停(pause):用户启动了Activity,正在运行,并且可见,可是一个通知或者其余的提示出如今屏幕的最上层,此时能够看到Activity可是不能和它交互。好比有电话进来,用户能够选择接听或者忽略;
  3. 中止(stop):用户启动了Activity,正在运行,可是由于其余Activity的启动或者切换而隐藏。这时该activity不能直接操做,除了经过通知;
  4. 消亡(dead):activity不在是启动的,好比电话作了重置(reset),或者activity被终止,好比由于内存不够了。

与activity状态相关的方法游戏

android系统经过调用一些约定的activity方法,来转换activity的状态。进程

onCreate()方法和onDestroy()方法事件

onCreate()方法被调用的状况:内存

  1. 当activity第一次被建立的时候,带null参数;
  2. 若是activity已经运行过,后来被kill掉,将调用带Bundle参数的onCreate()方法,该参数来源于onSaveInstanceState()
  3. 当activity处于不一样的设备状态时,好比从竖显到横显,将会调用onCreate()方法重建activity

onDestroy被调用的状况,即当activity关闭的状况:

  1. activity执行了finish()方法
  2. android须要RAM,可能会紧急关闭activity

须要注意的是,若是内存十分紧急,可能不会调用onDestroy方法,而是系统不顾一切的关闭掉,好比来电话的时候。onDestroy()一般用于释放在onCreate()方法中得到的资源。

onStart()、onRestart()和onStop()方法

activity在前台执行,可能由于是第一次启动,或者从隐藏状态从新带回前台(好比其余的activity或者来电话)。以上状况都会执行onStart()。

onRestart()方法会在activity已经中止,从新开始的时候调用。

onStop()方法在activity要中止的时候调用。

onPause()和onResume()方法

onResume()方法在activity要前台运行的时候执行,好比第一次初始启动后,或者从中止(stop)状态从新开始,或者当一个弹出对话框被清除(好比来电话)。这是刷新UI的最佳位置,能够在此方法中刷新视图,或者调用后台线程更新UI。

相应的,当其余activity夺取了当前activity的控制权后,须要调用当前activity的onPause()方法。在此方法中,应该取消任何在onResume()方法中作的事情。好比关闭后台线程,释听任何独占方位的资源(好比摄像头)。

一旦onPause()方法被调用,android系统将保留对此activity所在进程在任什么时候刻kill的权利。所以在此状态下不会可靠的收到未来的事件消息。

对状态的合理处理

通常状况下,上述方法会处理应用程序通用的事情。好比经过onCreate()方法关联出最后的UI,经过onPause()方法关闭后台线程。

但有时须要为activity保存状态。好比有个计算器程序activity,计算结果后,可能又作了其余事情,用户回头想查刚才计算的结果。由于计算器有可能由于内存稀缺而关闭。

这时须要使用onSaveInstanceState()方法,android会经过该方法保存状态,能够覆盖该方法保存本身的状态值到Bundle。

而后经过onCreate()或者onRestoreInstanceState()方法获得Bundle对象实例恢复这些自定义状态。

相关文章
相关标签/搜索