[Android] Activity生命周期


Actvity 堆栈java

每一个Actvity的状态由它所在Activity栈中的位置所决定,全部当前正在运行的Actvity将遵循照后进先出的原则。当一个新的 Activity启动,当前的Activity将移至堆栈的顶部,若是用户使用Back按钮,或在前台Activity被关闭,下一个Activity将 被激活而且移至到堆栈的顶部。这个过程以下图所示数据库

Activity状态安全

随着Activity的建立和销毁,也就会进出栈如上图所示,其中可能会经历如下四种状态:网络

  • Active状态:这时候Activity处于栈顶,且是可见的,有焦点的,可以接收用户输入前 景Activity。Runtime将试图不惜一切代价保持它活着,甚至杀死其余Activity以确保它有它所需的资源。当另外一个Activity变成Active时,当前 的将变成Paused状态。动画

  • Paused状态:在某些状况下,你的Activity是可见的,但没有焦 点,在这时候,Actvity处于Paused状态。例如,若是有一个透明或非全屏幕上的Activity在你的Actvity上面,你的 Activity将。当处于Paused状态时,该Actvity仍被认为是Active的,可是它不接受用户输入事件。在极端状况下,Runtime将杀死Paused Activity,以进一步回收资源。当一个Actvity彻底被遮住时,它将进入Stopped状态。spa

  • Stopped 状态:当Activity是不可见的时,Activity处于Stopped状态。Activity将继续保留在内存中保持当前的全部状态和成员信息,假 设系统别的地方须要内存的话,这时它是被回收对象的主要候选。当Activity处于Stopped状态时,必定要保存当前数据和当前的UI状态,不然一 旦Activity退出或关闭时,当前的数据和UI状态就丢失了。线程

  • Inactive状态:Activity被杀掉之后或者被启动之前,处于Inactive状态。这时Activity已被移除从Activity堆栈中,须要从新启动才能够显示和使用。code

  • 为了确保Activity可以及时的响应状态的变化,提供了一系列的事件处理程序来处理Activity的状态转移,参考下图和示例代码。
    对象

  • public class MyActivityextends Activity
    {
    // 在Activity生命周期开始时被调用 
    public void onCreate(Bundle
    icicle) {
    }
    //当activity从中止状态从新启动时调用 
    public void onRestart(){
    }
    //当activity对用户即将可见的时候调用。 
    public void onStart(){
    }
  • // onStart完成后被调用,用来回复UI状态 
    public void onRestoreInstanceState(Bundle savedInstanceState)
    {
    }
    //当activity将要与用户交互时调用此方法,此时activity在activity栈的栈顶,用户输入已经
    能够传递给它 
    public void onResume(){
    }
    // Activity即将移出栈顶保留UI状态时调用此方法 
    public void onSaveInstanceState(Bundle savedInstanceState)
    {
    }
    //当系统要启动一个其余的activity时调用(其余的activity显示以前),这个方法被用来提交那些持久数据的改变、中止动画、和其余占用
    CPU资源的东西。因为下一个activity在这个方法返回以前不会resumed,因此实现这个方法时代码执行要尽量快。
    public void onPause(){
    }
    //当另一个activity恢复并遮盖住此activity,致使其对用户再也不可见时调用。一个新activity启动、其它activity被切换至前景、当前activity被销毁时都会发生这种场景。
    public void onStop(){
    }
    //在activity被销毁前所调用的最后一个方法,当进程终止时会出现这种状况
    public void onDestroy(){
    }
  • 在一个Activity的完整的生命周期里,既创造和销毁之间,它会通过一个或多个不一样状态之间的转移包括从可见的到不可见,从Active到Inactive。每一次状态的转移都将触发以上这些事件。生命周期


  • Activity完整的生命周期
    完整的Activity生命周期之间从调用的OnCreate开始,到调用onDestroy结束。有可能在某些状况下,一个Activity被终止时并不调用onDestroy方法。
    使用OnCreate方法来初始化你的Activity:初始化的用户界面,分配引用类变量,绑定数据控件,并建立服务和线程。在OnCreate方法传 递的对象Bundle包含最后一次调用onSaveInstanceState保存的UI状态。你可使用这个Bundle恢复用户界面到之前的状态,无 论是在OnCreate方法或经过覆盖onRestoreInstanceStateMethod方法。
    覆盖onDestroy方法来清理OnCreate中建立的任何资源,并确保全部外部链接被关闭,例如网络或数据库的联系。
    为了不创造短时间对象和增长垃圾收集的时间,以至对用户体验产生直接影响。若是你的Activity须要建立一些对象的话,最好在onCreate方法中建立,由于它仅调用一次在一个Actvity的完整生命周期中。


  • 例如:某个Activity有一个在后台运行的线程,用于从网络下载数据,则该Activity能够在onCreate()中建立线程,在onDestory()中中止线程


  • Activity可见的生命周期
    一个Activity可见的生命周期始于OnStart调用,结束于OnStop调用。在这两个方法中间,你的Actvity将会对用户是可见的,尽管它 可能没有焦点,也可能部分被遮挡着。在一个Activity完整的生命周期中可能会通过几个Activity可见的生命周期,由于你的Activity可 能会常常在前台和后台之间切换。在极端状况下,Runtime将杀掉一个Activity即便它在可见状态而且并不调用onStop方法。

  • OnStop方法用于暂停或中止动画,线程,定时器,服务或其余专门用于更新用户界面程序。当用户界面是再次可见时,使用OnStart(或onRestart)方法来恢复或从新启动这些程序,。

  • onRestart方法优先于onStart被调用当一个Activity被重现可见时,使用它你能够实现一些Activity从新可见时的特殊的处理。

  • 例如:能够在onStart中注册一个Intent Receiver来监听数据变化致使UI的变更,当再也不须要显示时候,能够在onStop()中注销它。onStart(),onStop()均可以被屡次调用,由于Activity随时能够在可见和隐藏之间转换。

  • OnStart / OnStop方法也被用来注册和注销专门用于更新用户界面Intent接收者。


  • Activity活跃的生命周期
    一个Activity活跃 的生命周期始于OnResume调用,结束于OnPause调用。一个活跃的Actvity老是在前台而且接收用户输入事件。当一个新的Actvity启 动,或该设备进入休眠状态,或失去焦点,Activity活跃的生命周期就结束了。尽可能在onPause和onResume方法中执行较量轻的代码以确保 您的应用程序可以快速响应Acitvity在前台和后台之间切换。


  • 在调用onPause以前,onSaveInstanceState会被调用。这个方法提供了一个机会保存当前的UI状态到Bundle当中。 Bundle信息将会被传递到OnCreate和onRestoreInstanceState方法。使用onSaveInstanceState保存 UI状态(如检查按钮状态,用户焦点,未提交用户输入)可以确保目前相同的用户界面当Activity下次被激活时。在Activity活跃生命周期中, 你能够安全地认onSaveInstanceState和onPause将被调到即便当前进程将终止。

相关文章
相关标签/搜索