Android 随笔——Activity的生命周期的理解

来源:互联网 发布:淘宝wap访客是什么意思 编辑:程序博客网 时间:2024/06/05 19:16

    理解Activity的生命周期对应用程序开发来说是至关重要的,这样才能确保您的应用提供了一个很好的用户体验和妥善管理其资源。由于OPhone应用程序不控制自己的进程寿命,有OPhone Runtime管理每个应用程序进程,但是每个Activity的状态反过来会影响到OPhone Runtime是否将终止当前Activity和还是让它继续运行。

   Activity堆栈

   每个Activity的状态有它所在的Activity栈中的微指锁决定,所有当前正在运行的Activity将遵循照后进先出的原则。当一个新的Activity启动,当前的Activity将移至栈的顶部,如果用户使用Back键,或在前台Activity被关闭,下一个Activity将被激活并且移至到堆栈的顶部。

  Activity 状态

  随着Activity的创建和销毁,也就会进出栈,可能会经历一下四种状态:

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

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

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

4、Inactive状态:Activity被杀掉以后或者被启动以前,处于Inactive状态。这时Activity已被移除从Activity堆栈中,需要重新启动才可以显示和使用。

    状态过渡具有不确定性并且由OPhone Runtime 完全管理。OPhoneRuntime将首先杀掉处于Stopped状态的Activity,在极端情况下,也会杀掉那些处于Paused状态的Activity.

  为确保无缝的用户体验,这些状态之间的过渡对用户来说应该做的透明的。不管Activity处于那种状态,最终于的死保留好UI状态和用户数据,一旦Activity被激活,用户都能看到他想要的东西。


package com.example.myactivity;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;

public class MainActivity extends Activity {
    // 在Activity 生命周期开始时被调用
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    // 在onCreate 完成后被调用,用来回复UI状态
    @Override
    protected void onRestoreInstanceState(Bundle savedInstanceState) {
        // TODO Auto-generated method stub
        super.onRestoreInstanceState(savedInstanceState);
    }

    // 当Activity从停止状态重新启动时调用
    @Override
    protected void onRestart() {
        // TODO Auto-generated method stub
        super.onRestart();
    }

    // 当activity对用户即将可见的时候调用
    @Override
    protected void onStart() {
        // TODO Auto-generated method stub
        super.onStart();
    }

    // 当activity将要于用户交互时调用此方法,此时activity在activity栈的栈顶,用户输入已经可以传递给它
    @Override
    protected void onResume() {
        // TODO Auto-generated method stub
        super.onResume();
    }

    // activity即将移除栈顶保留UI状态时调用此方法
    @Override
    protected void onSaveInstanceState(Bundle outState) {
        // TODO Auto-generated method stub
        super.onSaveInstanceState(outState);
    }

    // 当系统要启动一个其他的activity时调用(其他的activity显示之前),这个方法被用来提交那些持久数据的改变、停止动画、和其他占用;
    // CPU资源的东西。由于下一个activity在这个方法返回之前不会resumed,所以实现这个方法时代码执行要尽可能快
    @Override
    protected void onPause() {
        // TODO Auto-generated method stub
        super.onPause();
    }
//当另外一个activity回复并遮盖住此activity,导致其对用户不在可见时调用。一个新activity启动、其他activity被切换至前景、当前activity被销毁时都会发生这种场景
    @Override
    protected void onStop() {
        // TODO Auto-generated method stub
        super.onStop();
    }
//在activity被销毁前所调用的最后一个方法,当进程终止时会出现这种情况
    @Override
    protected void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
    }

}


0 0
原创粉丝点击